2012-04-10 9 views
2

私の仕事は、(GetForegroundWindow APIを使用して達成された)フォアグラウンドウィンドウを見つけることでした。フォアグラウンドウィンドウ(EnumChildWindows APIを使用して実現)のすべての子ウィンドウを含むリストを事前に設定しなければなりませんでした。マウスカーソルがどの子ウィンドウにあるか、すなわち、どの子ウィンドウ(前景ウィンドウのボタンまたはテキストボックスでもよい)がアクティブであるかどうかを調べる必要があります。 クリックされたChildWindowsのハンドルを取得するためのAPIがありますか? フォーカスがあるChildWindowの名前(アクティブなフォアグラウンドウィンドウの名前)を取得しても、それだけで十分です。 ありがとうございました。フォアグラウンドウィンドウのどの子ウィンドウがクリックされたかを検出しますか?

+0

なぜあなたは別のアプリケーションのウィンドウをいじっているが解かれた何ですか?これがテスト自動化の場合は、System.Windows.Automation名前空間を使用できます。 –

+0

これはテストの自動化ではありません....私のアプリが何をしようとしているのかを説明するのに時間がかかりますが、私はすぐにあなたにお伝えします。アクティブなアプリケーションにある子ウィンドウのリストをあらかじめ入れておかなければなりませんEnumChildWindowsを使ってルックアップを参照することで、ユーザーの動き(クリック)を追跡し、次に行う必要のあることを指導します。そのために、どの子ウィンドウにフォーカスがあるかを正確に知る必要があります。 System.Windows.Automationを使ってどうやってやることができるかを教えてください。事前に感謝! – Ajit

+0

これはコンピュータベースのトレーニングです。 System.Windows.Automationは依然として有用かもしれません。ドキュメントを読んで速度を上げることができます。私はコメントであなたを教えようとはしません。 –

答えて

3
 InPtr hwnd = GetForegroundWindow(); 

     public static void GetAppActiveWindow(IntPtr hwnd) 
    { 
     uint remoteThreadId = GetWindowThreadProcessId(hwnd, IntPtr.Zero); 
     uint currentThreadId = GetCurrentThreadId(); 
     //AttachTrheadInput is needed so we can get the handle of a focused window in another app 
     AttachThreadInput(remoteThreadId, currentThreadId, true); 
     //Get the handle of a focused window 
     IntPtr focussed = GetFocus(); 

     StringBuilder activechild = new StringBuilder(256); 
     GetWindowText(focussed, activechild, 256); 
     string textchld = activechild.ToString(); 
     if (textchld.Length > 0) 
     { 
      Console.WriteLine("The active Child window is " + textchld + " ."); 

     } 
     //Now detach since we got the focused handle 
     AttachThreadInput(remoteThreadId, currentThreadId, false); 
    } 

これは、最終的には問題:)

関連する問題