2013-08-21 3 views
2

안녕하세요 저는 C#을 사용하여 (심지어 최소화 된 경우) 실행중인 다른 프로그램으로 창을 전환하려고합니다.C#을 사용하여 Windows를 전환하십시오.

왜 이것이 작동하지 않는지 궁금합니다.

오류 메시지 : 인수 1 :에 'System.Diagnostics.Process가'에서 변환 할 수 없습니다 'System.IntPtr 이름'

그것은 내가 PROC 변수가 적절한 참조 것이라고 생각 루프 안타 시간으로 윈도우 핸들러. 이것은 사실이 아닌가? 정말 도움을 주셔서 감사합니다. 미래의 독자

//declarations 
using system.IO; 
using System.Runtime.InteropServices; 
//more 

//namespace here 

//class here 

//initialize method 

//related .dll import 
[DllImport("user32.dll")] 
     public static extern void SwitchToThisWindow(IntPtr hWnd); 

String ProcWindow = "itunes"; 
//function which calls switchWindow() is here but not important 

//now we have switch window. 
private void switchWindow() 
     { 
      Process[] procs = Process.GetProcessesByName(ProcWindow); 
      foreach (Process proc in procs) 
      { 
       //switch to process by name 
       SwitchToThisWindow(proc); 

      } 
     } 

: 나는 또 다른 질문에서 내 코드에서이 지점에 도착. Correct way (in .NET) to switch the focus to another application

+0

프로세스 개체가 프로세스 핸들 (intptr)이 아닙니다. 여기를보십시오 : http://stackoverflow.com/questions/1276629/c-sharp-get-running-process-given-process-handle – jwrush

답변

3

SwitchToThisWindow는 그 과정에서 전환 할 창에 핸들을 기대하고있다.

내가 당신이 원하는 것은 생각

SwitchToThisWindow(proc.MainWindowHandle); 
+0

신난다. 그래서 내가 접근 할 수있는 속성을 가지고있다. – camdixon

+0

proc을 통해 얻을 수있는 또 다른 이점은 무엇입니까? 좋은 기사가 있습니까? – camdixon

+0

절대적으로 MSDN은 항상 최상의 리소스입니다. http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx –

5

보십시오 :

[DllImport("user32.dll")] 
public static extern void SwitchToThisWindow(IntPtr hWnd, bool turnon); 

String ProcWindow = "itunes"; 
//function which calls switchWindow() is here but not important 

//now we have switch window. 
private void switchWindow() 
{ 
    Process[] procs = Process.GetProcessesByName(ProcWindow); 
    foreach (Process proc in procs) 
    { 
    //switch to process by name 
    SwitchToThisWindow(proc.MainWindowHandle, false); 

    } 
} 

SwitchToThisWindow는 당신이 전달하려고했던 것입니다있는 윈도우가 아닌 프로세스에 대한 핸들 인 IntPtr입니다 기대

또한 SwitchToThisWindow에 대한 pinvoke 서명이 올바르지 않은 것으로 나타나고 bool 매개 변수가 누락되었습니다.

+0

부울 매개 변수는 false 여야합니다. http://msdn.microsoft.com/en-us/library/windows/desktop/ms633553%28v=vs.85%29.aspx –

+0

주목, 나는 그것을 업데이트했다. 코드 개선에 도움을 주셔서 감사합니다. 나는 그 기사가 너무 감사하다는 것을 이해할 수 있도록 그 기사를 고맙게 생각한다. – camdixon

+0

또 다른 빠른 관련 질문입니다. 창이 열렸는지 어떻게 API를 통해 감지 할 수 있습니까? 그렇다면이 함수를 호출 할 것입니다. – camdixon

관련 문제