我有一個.NET應用程序需要能夠檢測特定窗口何時獲得並失去焦點。我感興趣的特定窗口屬於另一個我無法控制的應用程序,雖然我有窗口句柄。.NET/Win32 - 檢測屬於另一個應用程序的窗口何時獲得焦點的事件
我真的是最好的方法來解決這個問題。到目前爲止,我可以看到2種可能性:一個計時器使用Win32調用來監視狀態的任何變化
- 。不是很好,因爲它存在缺失狀態變化的風險,例如如果窗口變爲活動狀態,則在定時器間隔內處於非活動狀態
- 使用掛鉤(SetWindowsHookEx)截獲到窗口的消息。聽起來像它應該工作,但擔心a)全局級掛鉤不會從.NET代碼工作,所以需要本地和b)這可以被視爲病毒/鍵盤記錄類型的活動,所以被操作系統阻止?
我敢肯定,還有其他的選擇,如果是的話,我很樂意聽到他們!
完美 - 這幾乎正是我所期待的。似乎有一個角落的情況(有時)最大化以前最小化的窗口不會觸發該窗口的EVENT_SYSTEM_FOREGROUND - 因此偵聽EVENT_SYSTEM_MINIMIZEEND也會解決該問題。謝謝,真棒回答 –
當我運行WPF應用程序時,消息循環約束對我來說不是問題。對於任何想要做同樣的事情,但是使用控制檯應用程序(默認情況下沒有消息循環)的人來說,這篇文章是很好的(搜索「在控制檯應用程序中處理消息」,如果鏈接被破壞,則爲「Stephen Toub」) - http:// msdn .microsoft.com/EN-US /雜誌/ cc163417.aspx –