2010-08-16 1 views
0

Я создаю панель задач, и мне нужно знать, когда изменяется активное окно. Я не хочу использовать таймер. Я думаю, что, возможно, есть сообщение WndProc, которое я могу перехватить.Как я могу отслеживать, когда окно активировано и деактивировано?

Я использую C#

+0

Не могли бы вы пояснить, что вы подразумеваете под «панель задач» - вы имеете в виду бар, аналогичный панели задач внизу экрана Windows? –

+0

Извините, я не был чист. Да, вот что я имею в виду. –

ответ

1

Это требует крюк, установленный SetWindowsHookEx, WH_SHELL. Обратный вызов получает уведомления, такие как HSHELL_WINDOWACTIVATED и HSHELL_WINDOWCREATED, чтобы вы могли узнать, что происходит с окнами верхнего уровня. Просмотрите статью SDK для «ShellProc» для получения полного списка уведомлений, которые вы можете получить. Почти все они имеют отношение к реализации вашей собственной панели задач.

Это была хорошая новость. Плохая новость в том, что WH_SHELL - глобальный крючок. Для этого требуется DLL, которая может быть добавлена ​​в другой процесс. Проблема в том, что вы не можете написать эту DLL в управляемом коде. Внедрение управляемого кода в неуправляемый процесс невозможно.

Обратно к хорошим новостям, кто-то решил эту проблему и создал неуправляемую DLL, которая может быть внедрена и может взаимодействовать с управляемым кодом. Проект is here. Не знаю, насколько это хорошо. Я подозреваю, что это может быть не совсем доказательство UAC.

+0

Он также не работает на 64-битной Windows. Для этого требуются две библиотеки DLL для инъекций и два приложения для инъекций. В противном случае вы получите только события из приложений с той же долей, что и ваша инжекторная/инъекционная DLL. – Tergiver

+0

Да, это будет одно осложнение. –

Смежные вопросы