检查是否有其他窗口被关闭
Checking if another window is closed c++
我正在开发一个应用程序,用于检查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();
相关文章:
- 在打开多个其他窗口时使用全屏窗口时帧速率非常低
- 在Visual Studio中单实例Qt应用程序版本5.11.1中,在所有其他窗口的顶部打开Qt MainWindow
- 打开应用程序主窗口 在系统托盘图标中的其他应用程序之上
- TCP 零窗口和对其他套接字的影响
- 在单个进程中使Qt顶级窗口被其他非Qt窗口"owned"
- 是否可以从其他线程隐藏qt小部件窗口
- 资源窗口在其他系统上无法正常工作 (Visual Studio 2012)
- 编译的程序在其他窗口PC上停止响应
- 在Visual Studio发射窗口中添加了其他C 支架
- QT设计师:除MainWindow以外的其他窗口
- 如何使用窗口 API 获取其他应用中的当前活动
- 关闭其他线程的对话框后无法从主窗口聚焦
- 为什么我不能在窗口上使用 boost::locale::conv::between 将 UTF-16 文本转换为其他编码
- Qt窗口不会使用其他类的"this->close()"关闭
- 如何覆盖其他窗口应用程序的元素?
- 将 c++ 游戏部署到其他窗口计算机
- C++控制台应用呈现其他 CMD 窗口不接受控制台输入
- Qt5 将自定义窗口关闭信号连接到其他窗口
- 在 Windows 7 中的其他窗口之上强制应用
- 如果其他程序在64位窗口中使用太多,那么32位程序是否真的会内存不足