2014-08-30 55 views
0

我想从我的c#application.i搜索很多程序,并找到一些例子,但是我错误地使用了visual studio。 ShowWindow(hWnd, SW_HIDE);线给我一个错误"showwindow(system.IntPtr,int) has some invalid argument" PLZ这是哪里的代码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'已经给你一个正确类型的值。类型转换是您遇到错误的原因:它是不兼容的类型。 – 2014-08-30 03:31:05

回答

1

你声明的hWnd为INT的问题。但是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 2014-08-30 02:58:36