Как я могу отслеживать, когда окно активировано и деактивадет?
-
29-09-2019 - |
Вопрос
Я делаю панель задач, и мне нужно знать, когда изменилось активное окно. Я не хочу использовать таймер. Я думаю, что, возможно, есть сообщение WNDPROC, которое я могу перехватить.
Я использую C #
Решение
Это требует крючка, установленного setwindowshookex, wh_shell. Обратный вызов получает уведомления, такие как hshell_windowActived и hshell_windowreated, чтобы вы могли знать, что происходит с окнами верхнего уровня. Проверьте статью SDK для «ShellProc.«Для полного списка уведомлений, которые вы можете получить. Почти все они имеют отношение к реализации вашей собственной панели задач.
Это были хорошие новости. Плохая новость заключается в том, что WH_SHELL - это глобальный крючок. Требуется DLL, который может быть введен в другой процесс. Проблема в том, что вы не можете написать этот DLL в управляемом коде. Внедрение управляемого кода в неуправляемый процесс невозможно.
Вернувшись к Good News, кто -то решил эту проблему и создал неуправляемый DLL, который может инъецируемый и может взаимодействовать с управляемым кодом. Проект здесь. Анкет Не знаю, насколько это хорошо. Я подозреваю, что это не может быть неполным доказательством.