活动窗口上的Windows系统事件是否已更改?

Vas*_*iak 23 .net c# windows hook winapi

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

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

谢谢.

小智 31

是的,您可以使用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)
{
    /* your code here */
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么对C#问题有C/C++答案? (7认同)
  • 投反对票,因为它是伪代码。几乎什么都没有,无论是方法还是那些参数,甚至编译器都找不到“VOID CALLBACK”。什么都行不通。 (3认同)