gpt4 book ai didi

c++ - 检查另一个窗口是否关闭c++

转载 作者:太空狗 更新时间:2023-10-29 22:58:36 24 4
gpt4 key购买 nike

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

我使用 EnumWindows 列出所有事件窗口并且它有效,现在我想创建一个函数,当窗口关闭时在控制台上写一条消息。是可能的还是我必须在单独的线程中检查 WindowHandler 数组 以及如何检查它们的状态?

感谢您的帮助。

最佳答案

最简单的解决方案是使用 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 = %08X\n", 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();

关于c++ - 检查另一个窗口是否关闭c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40005240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com