2012-11-11 6 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 

      } 
     } 

내가 사용하는 코드입니다 내 응용 프로그램에서했던 것처럼 당신은 캐럿 위치의 검색 수 있지만 모든 곳을 작동하지

, 당신이 API에 익숙하지 않은 경우 많은 응용 프로그램은, 당신이 타이머 코드 또는 이제까지 당신이

을 기원합니다 당신은 WINAPI를 사용할 필요를 배치 할 수 있습니다, 저에게 알려 주시기 바랍니다

+0

안녕하세요, 저는이 코드를 사용할 수 없습니다. API에 익숙하지 않아서 생각합니다. – tester

+0

@tester이 사이트 [pinvoke] (http://www.pinvoke.net/index.aspx)에서 검색해보십시오. API 함수는 GetForegroundWindow, GetWindowThreadProcessId, GetGUIThreadInfo, GetWindowInfo 및 structs는 GUITHREADINFO, WINDOWINFO입니다. ,,, 나는이 코드가 많은 winapi 함수를 사용한다는 것을 인정한다.이 코드를 잘 실행하기 위해서는 어떻게해야하는지 잘 알아야한다. 행운을 빌어 요 :) –

+0

나는 API 문제를 해결하고 내 응용 프로그램을 실행하지만 여전히 작동하지 않습니다. 두 조건은 모두 거짓입니다. – tester

0

이 코드를 사용하여 포커스가있는 TextBox를 확인할 수 있습니다.

foreach (Control item in this.Controls) 
     { 
      if (item is TextBox && item.Focused) 
      { 
       //Write your notification code here. 
      } 
     } 
관련 문제