Ранее я спросил this question о возвращении пользователя в предыдущее окно, которое они использовали, но я нашел решение, но он создал еще одну проблему. Функция, которая определяет предыдущее окно, будет иногда работать (если произойдет определенный набор событий, которые я не могу воссоздать по желанию, но происходит случайным образом). В какой-то момент он переходит на 2 окна назад, иногда на одно окно обратно. Он делает это, потому что панель задач находится в пути первым, а затем появляется окно.Поиск IntPtr TaskBar
Итак, чтобы исправить это, я решил, что должен продолжать просматривать предыдущие окна, пока не доберусь до окна, которое не является панелью задач, однако я не знаю, как определить IntPtr панели задач ,
Я пробовал:
IntPtr taskBarWnd = FindWindow("Shell_TrayWnd", null);
Но это не похоже на работу. Если я называю MessageBox.Show(taskBarWnd.ToInt64().ToString())
, я получаю 131258, но когда я делаю:
IntPtr thisWnd = GetForegroundWindow();
IntPtr lastWnd = GetWindow(thisWnd, 2);
Он ссылается на панели задач, но когда я называю ту же функцию MessageBox выше, он возвращает 131260 (65774, если значок находится в пределах скрытых значков площадь).
Кто-нибудь знает, есть ли что-нибудь еще, я могу попытаться определить, является ли найденная мной lastWnd
панель задач? Я бы предпочел не иметь того, что проверяет, близки ли IntPtr друг к другу, а не быть равными.
Я не уверен, но, возможно, вы можете попытаться проверить, принадлежит ли окно процессу «explorer.exe», что-то вроде этого, потому что панель задач управляется этим процессом, если я не ошибаюсь (это было в то время как я не копался в такого рода вещах) – ppetrov
ах, звучит как хорошая мысль. Как бы я это обнаружил (быстрый поиск в google дал мало, но я думаю, что доходит до незнания правильных слов) – topherg
ah, nevermind, получил его :) – topherg