Как я могу отслеживать, когда окно активируется и деактивируется? - PullRequest
0 голосов
/ 17 августа 2010

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

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

1 Ответ

1 голос
/ 17 августа 2010

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

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

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

...