如何使用SetWinEventHook()函数获取活动窗口更改消息
How to use SetWinEventHook() function to get Active Window changed message
我一直在做一个项目,该项目需要检测当前活动窗口并连续获取活动窗口标题。有人能向我解释如何使用SetWinEventHook()函数来获取活动窗口更改的消息吗。[我使用了带有计时器的GetForegroundWindow()函数来获取活动窗口。由于计时器的原因,这种方法不太准确。所以我需要将其与SetWinEventHook()函数一起使用。有人能告诉我如何做到这一点吗?]
hEvent = SetWinEventHook(EVENT_SYSTEM_FOREGROUND , EVENT_SYSTEM_FOREGROUND ,NULL,
WinEventProcCallback, 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);
VOID CALLBACK WinEventProcCallback ( HWINEVENTHOOK hWinEventHook, DWORD dwEvent, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
/* how to get active window message */
}
我找到了解决方案。EVENT_SYSTEM_FOREGROUND事件是缺失的部分。即使前台窗口已更改为其他窗口,系统也会发送此事件。我们可以使用此事件来获取当前活动窗口。
VOID CALLBACK WinEventProcCallback ( HWINEVENTHOOK hWinEventHook, DWORD dwEvent, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
if (dwEvent == EVENT_SYSTEM_FOREGROUND)
{
/* do something */
}
}
相关文章:
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 如何按z顺序获取第二个活动窗口?
- 全局挂钩 DLL 仅在 C# 主窗口处于活动状态/前台时调用 C# 回调方法
- 如何在 Ubuntu Qt 中获取活动窗口标题
- 如何在C Winapi中获取活动文件Explorer窗口的路径
- 使用XCB获取活动窗口的宽度
- 如何使用QEvent::WindowBlocked,以便特定窗口始终处于活动状态?
- 如何在窗口上获取活动桌面类型
- 如何使用窗口 API 获取其他应用中的当前活动
- 应该如何检索当前活动窗口的光标下的单词
- 如何在Windows8中获取活动窗口的标题颜色
- 确定窗口是否聚焦/活动/前景
- SDL2窗口是否可以始终处于活动状态,并在DirectX窗口上运行
- 如何在OSX中执行时强制Qt应用程序成为活动/前台窗口
- 如何使用C++更改窗口的活动录制设备?
- 模式对话框处于活动状态时隐藏MFC主窗口
- 以编程方式在窗口中获取活动连接
- 问题:如何在非活动窗口中显示所选文本
- QMainWindow 不再处于活动状态窗口
- 检查窗口是否处于活动状态