2013-04-17 4 views
0

Ранее я спросил 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 друг к другу, а не быть равными.

+0

Я не уверен, но, возможно, вы можете попытаться проверить, принадлежит ли окно процессу «explorer.exe», что-то вроде этого, потому что панель задач управляется этим процессом, если я не ошибаюсь (это было в то время как я не копался в такого рода вещах) – ppetrov

+0

ах, звучит как хорошая мысль. Как бы я это обнаружил (быстрый поиск в google дал мало, но я думаю, что доходит до незнания правильных слов) – topherg

+0

ah, nevermind, получил его :) – topherg

ответ

0

Я не могу проверить прямо сейчас, так как это мой iPad, но я уверен, что окна панели задач используют пользовательские классы окон, поэтому вы можете позвонить GetClassName и выяснить из результата, что ваш дескриптор ссылается на ,