ShowWindow会产生意外的窗口/应用程序

时间:2014-12-25 07:56:30

标签: c# winapi showwindow

我尝试使用此代码在我的c#应用程序中弹出记事本窗口:

Process[] Processes = Process.GetProcessesByName("notepad");
IntPtr hWnd = IntPtr.Zero;
Debug.WriteLine("Processes: " + Processes.Length);

// do something
foreach(Process p in Processes)
{
    Console.WriteLine(p.ProcessName);
    SetForegroundWindow(p.Handle);
    ShowWindow(p.Handle, ShowWindowEnum.Show);
    //SetActiveWindow(p.Handle);

    //p.Kill();
}

控制台记录"记事本"正好。我甚至可以杀死记事本的过程。但是,出于某种原因,showWindow随机工作。大部分时间它会产生类似GDI +服务器的标题为空窗口等,并且很少会弹出记事本。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

ShowWindow需要一个窗口句柄,而不是进程句柄。

尝试传递MainWindowHandle

SetForegroundWindow(p.MainWindowHandle);
ShowWindow(p.MainWindowHandle, ShowWindowEnum.Show);

这对于Notepad.exe来说应该没问题,但对于拥有多个顶级窗口的应用程序来说,它通常是不可靠的。