Как отслеживать событие закрытия окна по его дескриптору?

У меня есть метод, который извлекает дескриптор текущего переднего окна в проводнике Windows. Я хочу, чтобы метод/процедура запускалась, когда это окно закрывается или до закрытия окна. Какие доступные API Windows доступны для этой работы? (если есть) Примеры кода будут оценены. Спасибо


person Nilaksha Perera    schedule 05.08.2015    source источник
comment
Проверьте этот ответ. Вы должны подключиться к оболочке, чтобы перехватывать события Windows.   -  person thepirat000    schedule 05.08.2015
comment
Посмотрите на SetWinEventHook() или SetWindowsHookEx(). Вы можете использовать GetWindowThreadProcessId(), чтобы получить поток окна и идентификаторы процессов для передачи им.   -  person Remy Lebeau    schedule 05.08.2015
comment
SetWindowsHookEx() может установить перехватчик WH_CBT для отслеживания событий HCBT_SYSCOMMAND/SC_CLOSE, но для перехвата другого процесса требуется DLL. SetWinEventHook() не требует DLL, но не имеет события, специально предназначенного для закрытия окна, поэтому, возможно, отслеживайте события EVENT_OBJECT_DESTROY или EVENT_OBJECT_STATECHANGE.   -  person Remy Lebeau    schedule 05.08.2015
comment
@thepirat000: RegisterShellHookWindow() документация гласит: Эта функция не предназначена для общего использования. Он может быть изменен или недоступен в последующих версиях Windows. Кроме того, в нем нет события закрытия окна, только его уничтожение. То же, что SetWinEventHook(). Не все окна уничтожаются, когда они закрыты, поэтому я думаю, что SetWindowsHookEx(), вероятно, лучший выбор для ОП.   -  person Remy Lebeau    schedule 05.08.2015
comment
В качестве альтернативы SetWindowsHookEx() может установить хук WH_CALLWNDPROC/RET для отслеживания WM_CLOSE сообщений.   -  person Remy Lebeau    schedule 05.08.2015