我正在開發的桌面應用程序需要知道在應用程序運行時哪些窗口處於活動狀態。目前它每250毫秒執行GetForegroundWindow()
呼叫(的user32.dll
)。這種方法不是很準確。活動窗口上是否有Windows系統事件更改?
是否有任何Windows(WINAPI?)事件會在每次激活(聚焦)窗口改變時觸發?我想訂閱我的回調函數。
謝謝。
我正在開發的桌面應用程序需要知道在應用程序運行時哪些窗口處於活動狀態。目前它每250毫秒執行GetForegroundWindow()
呼叫(的user32.dll
)。這種方法不是很準確。活動窗口上是否有Windows系統事件更改?
是否有任何Windows(WINAPI?)事件會在每次激活(聚焦)窗口改變時觸發?我想訂閱我的回調函數。
謝謝。
是的,您可以使用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 */
}
有WM_ACTIVATE message,它被髮送到激活和停用的窗口。
這不是我正在尋找的人。訂閱系統中的每個窗口都是不合理的。 :) – 2010-12-10 10:14:18
@Vasiliy Borovyak:啊,不要緊,然後 - 我誤解了,認爲你只需要一個特定窗口的活動狀態。 – Piskvor 2010-12-10 10:18:57
一個很好的答案在這裏:http://stackoverflow.com/a/11943387/134761 – angularsen 2012-09-28 12:15:19