1

我正在尝试使用以下代码在我的 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+server 之类的标题为空窗口等,并且很少弹出记事本。

我究竟做错了什么?

4

1 回答 1

1

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

尝试通过MainWindowHandle

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

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

于 2014-12-25T08:04:10.260 回答