2017-12-06 2 views
0

두 개의 프로젝트 (TestVisual 및 RecordPlayBack)가 있습니다. TestVisual에는 두 개의 창 (MainWindow 및 TestWindow)이 있습니다. 나는 내가 TestVisual.wpf 응용 프로그램에서 RecordPlayBack.exe을 실행 이제, 코드 아래 사용하여다른 응용 프로그램의 창을 다른 응용 프로그램에서 가져올 수 있습니까?

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

을 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- handle-by-its-name-title. 희망이 답변은 도움이! – 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; 
    } 
} 
관련 문제