检查是否有其他窗口被关闭

Checking if another window is closed c++

本文关键字:窗口 其他 是否 检查      更新时间:2023-10-16

我正在开发一个应用程序,用于检查windows上用户计算机上打开的窗口(就像任务管理器)

我使用EnumWindows列出所有活动窗口,它的工作,现在我想创建一个函数,写一个消息在控制台上当一个窗口已关闭。是可能的,或者我必须检查一个数组的windowandler 在一个单独的线程,我如何检查他们的状态?

谢谢你的帮助

最简单的解决方案是使用WinEvents,通过注册EVENT_OBJECT_DESTROY事件。代码相当简单:

#include <windows.h>
namespace {
    HWINEVENTHOOK g_WindowDestructionHook = NULL;
}
inline void CALLBACK WinEventProc( HWINEVENTHOOK hWinEventHook,
                                   DWORD         event,
                                   HWND          hwnd,
                                   LONG          idObject,
                                   LONG          idChild,
                                   DWORD         dwEventThread,
                                   DWORD         dwmsEventTime ) {
    // Filter interesting events only:
    if ( idObject == OBJID_WINDOW && idChild == CHILDID_SELF ) {
        wprintf( L"Window destroyed: HWND = %08Xn", hwnd );
    }
}
inline void RegisterWindowDestructionHook() {
    g_WindowDestructionHook = ::SetWinEventHook( EVENT_OBJECT_DESTROY,
                                                 EVENT_OBJECT_DESTROY,
                                                 NULL,
                                                 WinEventProc,
                                                 0, 0,
                                                 WINEVENT_OUTOFCONTEXT );
}
inline void UnregisterHook() {
    ::UnhookWinEvent( g_WindowDestructionHook );
}

使用同样简单:

::CoInitialize( NULL );
RegisterWindowDestructionHook();
MSG msg = {};
while ( ::GetMessageW( &msg, nullptr, 0, 0 ) > 0 ) {
    ::TranslateMessage( &msg );
    ::DispatchMessageW( &msg );
}
UnregisterHook();
::CoUninitialize();