2012-11-11 83 views
1

我正在用C#編寫一個簡單的應用程序。我希望這個應用程序在系統托盤上檢測Windows上任何位置的焦點元素。如果焦點元素是文本框(用戶可以輸入文本的任何地方),那麼應用程序應該在系統托盤上顯示通知。我的問題是,如何檢測焦點元素並檢查它?檢測屏幕上任意位置的焦點文本框

回答

0

有沒有絕對的方法做到這一點,有太多的控件允許你添加文本。

就像我在我的應用程序沒有你可以搜索插入位置的,但它是不工作的每一個地方,

這裏是我使用的代碼,

 GUITHREADINFO lpgui = new GUITHREADINFO(); 
     IntPtr fore = GetForegroundWindow(); 
     uint tpid = GetWindowThreadProcessId(fore, IntPtr.Zero); 
     lpgui.cbSize = Marshal.SizeOf(lpgui.GetType()); 
     bool flag = GetGUIThreadInfo(tpid, out lpgui); 
     WINDOWINFO pwi = new WINDOWINFO(); 
     pwi.cbSize = (uint)Marshal.SizeOf(pwi.GetType()); 
     GetWindowInfo((IntPtr)lpgui.hwndCaret, ref pwi); 

     if (flag) 
     { 
      if (!(lpgui.rcCaret.Location.X == 0 && lpgui.rcCaret.Location.Y == 0)) 
      { 

//TODO 

      } 
     } 

這樣正常工作太許多應用程序,你可以放在一個計時器該代碼,或者您希望

什麼都必須使用WINAPI,請告訴我,如果你不熟悉的API

+0

嗨,我不能使用這段代碼。我想因爲我不熟悉api。 – tester

+0

@tester請嘗試在本站搜索,[pinvoke](http://www.pinvoke.net/index.aspx),api函數是GetForegroundWindow,GetWindowThreadProcessId,GetGUIThreadInfo,GetWindowInfo ,,結構是GUITHREADINFO,WINDOWINFO ,,,我承認,這段代碼使用了很多winapi函數,你需要研究如何處理它們以便很好地運行這些代碼。祝你好運:) –

+0

我解決了API問題,並運行我的應用程序,但仍然無法正常工作,兩種情況都是錯誤的。 – tester

0

您可以使用此代碼來檢查焦點文本框。

foreach (Control item in this.Controls) 
     { 
      if (item is TextBox && item.Focused) 
      { 
       //Write your notification code here. 
      } 
     } 
相關問題