2017-12-06 11 views
0

私は2つのプロジェクト(TestVisualとRecordPlayBack)を持っています。 TestVisualには2つのウィンドウ(MainWindowとTestWindow)があります。私は別のアプリケーションのウィンドウを別のアプリケーションから取得することはできますか?

var windows = System.Windows.Application.Current.Windows; 
IntPtr twHandle = new System.Windows.Interop.WindowInteropHelper(windows[2]).Handle; 

今、私はTestVisual.wpfアプリケーションからRecordPlayBack.exeを実行し、コードの下に使用してTestWindowインスタンスを取得することができます。したがって、Application.CurrentはTestWindowが利用できないRecordPlayBackアプリケーションを保持します。この場合、TestVisualアプリケーションのTestWindowインスタンスを取得する方法は?

私は私に任意のアイデアを提案してください、コードの下に

[DllImport("user32.dll", SetLastError = true)] 
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

IntPtr twHandle =(IntPtr) User32.FindWindow("test", null); 

これを試してみました。

注:RecordPlayBackプロジェクトは、TestVisualプロジェクトの参照として追加されています。

おかげで、

+0

を別のアプリケーションでウィンドウハンドルを取得することができます。これは、おそらく以前に尋ねてきたが、例えば見てみましょうhttps://stackoverflow.com/質問/ 1953582 /実行中のプロセス名、またはhttps://stackoverflow.com/questions/13547639/return-window-ハンドル名のタイトル。これらの答えが役立つことを願って! – GrahamMc

+0

こんにちは@GrahamMc、あなたの提案をありがとう。私は自分のアプリケーションのスクリーンショットを追加しました。それを見てください。私は以下の提案を試しました。 [DllImport( "user32.dll")] public static extern IntPtr GetForegroundWindow(); RecordWindowの中止ボタンをクリックしながら "TestWindow"をキャプチャしようとしているので、 "RecordWindow"をキャプチャします。この場合、RecordWindowが前面に表示されます。 他に提案はありますか? – Prithiv

+0

多分、プロセス内のすべてのウィンドウのリストを取得する方法についてはhttps://stackoverflow.com/questions/2281429/how-to-enumerate-all-windows-within-a-processを見てください。答えを使用してプロセスを取得したら、すべてのウィンドウを一覧表示して正しいウィンドウを見つけることができます。 – GrahamMc

答えて

0

私は、コードの下に使用して

System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses(); 
foreach(System.Diagnostics.Process p in processes) 
{ 
    if(p.MainWindowTitle == "Test Window") 
    { 
     twHandle = p.MainWindowHandle; 
     break; 
    } 
} 
関連する問題