2011-05-29 152 views
5

我正在製作一個C#WPF應用程序,並且每次用戶在我的應用程序之外的某個地方單擊時,我想要顯示一個警告,並顯示單擊窗口的TITLE。要檢測我的應用程序外部的點擊次數,我正在使用LowLevelMouseProc。但是,我將如何獲得專注於C#的窗口?C#獲得焦點窗口?

在此先感謝!

編輯: 我知道這是不是與我原來的問題,但我怎麼會得到關注,以及控制?

+0

第二個問題:您可能需要一個函數['GetFocus()'](http://msdn.microsoft.com/en-us/library/ms646294%28v=vs.85%29.aspx) - 閱讀MSDN頁面上的註釋 – 2011-05-29 23:06:24

+0

您確定只想檢測用戶在應用程序外部點擊*的情況嗎?用戶也可以使用鍵盤來切換窗口。您可以嘗試查看WM_ACTIVATE消息:http://stackoverflow.com/questions/813356/determine-where-activation-is-going-when-a-form-is-deactivated(Winforms,但相同的基本思想適用於WPF以及當你從WPF窗口獲得HWNDs時) – 2011-05-29 23:27:11

回答

3

關於如何獲得焦點控制的後續問題,您可以使用GetGUIThreadInfo獲得集中控制的HWND。請注意,您傳遞的是擁有外部窗口的線程,而不是外部窗口本身(函數文檔告訴您如何從外部窗口句柄獲取線程ID)。重點HWND通過GUITHREADINFO.hwndFocus成員返回。

請注意,通常情況下,你不能比HWND做得更好,因爲前景窗口不一定是.NET應用程序。例如,如果外部窗口是WPF窗口,那麼而不是會告訴您該窗口中的哪個WPF控件具有焦點,因爲WPF控件沒有HWND。

6

GetForegroundWindow應該這樣做。

+0

謝謝你,那可行!我知道這與我原來的問題沒有關係,但我怎樣才能將控制集中在一起? – mattsven 2011-05-29 21:55:15