Как я могу отслеживать, когда окно активировано и деактивадет?

StackOverflow https://stackoverflow.com/questions/3497878

Вопрос

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

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

Это было полезно?

Решение

Это требует крючка, установленного setwindowshookex, wh_shell. Обратный вызов получает уведомления, такие как hshell_windowActived и hshell_windowreated, чтобы вы могли знать, что происходит с окнами верхнего уровня. Проверьте статью SDK для «ShellProc.«Для полного списка уведомлений, которые вы можете получить. Почти все они имеют отношение к реализации вашей собственной панели задач.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top