我尝试使用此代码在我的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 +服务器的标题为空窗口等,并且很少会弹出记事本。
我做错了什么?
答案 0 :(得分:1)
ShowWindow
需要一个窗口句柄,而不是进程句柄。
尝试传递MainWindowHandle
。
SetForegroundWindow(p.MainWindowHandle);
ShowWindow(p.MainWindowHandle, ShowWindowEnum.Show);
这对于Notepad.exe来说应该没问题,但对于拥有多个顶级窗口的应用程序来说,它通常是不可靠的。