活动窗口上的 Windows 系统事件是否已更改? [英] Is there Windows system event on active window changed?

查看:29
本文介绍了活动窗口上的 Windows 系统事件是否已更改?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发的桌面应用程序需要知道应用程序运行时哪些窗口处于活动状态.目前它每 250 毫秒执行一次 GetForegroundWindow() 调用(user32.dll).这种方法不是很准确.

The desktop application I'm developing need to know what windows were active while the application was run. Currently it performs GetForegroundWindow() call (of user32.dll) every 250 msec. The approach is not very accurate.

是否有任何 Windows (WINAPI?) 事件会在每次活动(聚焦)窗口更改时触发?我想订阅我的回调函数.

Is there any Windows (WINAPI?) event which fires every time the active (focused) window changed? I'd like to subscribe with my callback function.

谢谢.

推荐答案

是的,您可以使用 SetWinEventHook 函数.

Yes, you can use SetWinEventHook function.

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)
{
    /* your code here */
}

这篇关于活动窗口上的 Windows 系统事件是否已更改?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆