2015-06-23 40 views
3

我一直在研究一個需要檢測當前活動窗口並持續獲取活動窗口標題的項目。 任何人都可以解釋我如何使用SetWinEventHook()函數得到活動窗口改變了消息。 [我用GetForegroundWindow()函數與定時器來獲得活動窗口。由於計時器的原因,這種方法不太準確。所以我需要使用SetWinEventHook()函數。有人可以解釋我該怎麼做嗎? ]如何使用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 */ 
} 
+1

這裏有很好的例子:http://blogs.msdn.com/b/oldnewthing/archive/2013/03/25/10404940.aspx http://blogs.msdn.com/b/oldnewthing/存檔/ 2011/10月26日/ 10230020.aspx – Paul

回答

3

我找到了解決方案。 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 */ 
    } 
}