2014-08-30 4 views
0

내 C# application.i에서 프로그램을 집중시키고 싶습니다. 많은 예제를 찾았습니다.하지만 오류가 있습니다. Visual Studio를 사용하고 있습니다. ShowWindow(hWnd, SW_HIDE); 라인은 나에게이 코드runing 프로그램의 C# 포커스 창

[DllImport("user32.dll")] 
     internal static extern IntPtr SetForegroundWindow(IntPtr hWnd); 

     [DllImport("user32.dll")] 
     internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

private void FocusProcess() 
     { 
      int hWnd; 
      Process[] processRunning = Process.GetProcesses(); 
      foreach (Process pr in processRunning) 
      { 
       if (pr.ProcessName == "notepad") 
       { 
        hWnd = pr.MainWindowHandle.ToInt32(); 
        ShowWindow(hWnd, 3);//error line 
       } 
      } 
     } 
+0

왜 'ToInt32()'를 호출 했습니까? 'MainWindowHandle'은 이미 올바른 타입의 값을줍니다. 유형 변환은 오류가 발생하는 이유입니다. 호환되지 않는 유형입니다. –

답변

1

당신은 int로서 HWND을 선언하는 문제 오류 "showwindow(system.IntPtr,int) has some invalid argument" PLZ를 제공합니다. 그러나 ShowWindow 함수에는 IntPtr이 필요합니다. pr.MainWindowHandle은 IntPtr이므로 hWnd로 사용하면됩니다. Btw. 이 창을 최상위로 사용하려면 SetForegroundWindow를 호출해야합니다.

[DllImport("user32.dll")] 
    internal static extern IntPtr SetForegroundWindow(IntPtr hWnd); 

    [DllImport("user32.dll")] 
    internal static extern bool ShowWindow(IntPtrhWnd, int nCmdShow); //ShowWindow needs an IntPtr 

    private static void FocusProcess() 
    { 
     IntPtr hWnd; //change this to IntPtr 
     Process[] processRunning = Process.GetProcesses(); 
     foreach (Process pr in processRunning) 
     { 
      if (pr.ProcessName == "notepad") 
      { 
       hWnd = pr.MainWindowHandle; //use it as IntPtr not int 
       ShowWindow(hWnd, 3); 
       SetForegroundWindow(hWnd); //set to topmost 
      } 
     } 
    } 
+0

"메모장"은 대문자 N으로 표기해야합니까? 또는 대소 문자를 구분하지 않는 비교를 사용하는 것이 더 좋을까요? – RenniePet