我似乎无法find一种方法来确定一个Process
是否有一个用户界面,例如一个窗口,这是用户可见的?
Environment.UserInteractive
对外部进程没有用处 process.MainWindowHandle != IntPtr.Zero
似乎总是在我的testing中返回false? 我想区分说Notepad和conhost
Process
实例中找出进程ID。 EnumWindows
枚举顶级窗口。 GetWindowThreadProcessId
并查看它是否匹配目标PID。 IsWindowVisible
和/或IsIconic
来测试该窗口是否对用户可见。 有关System.Diagnostics.Process.MainWindowHandle
的MSDN文章声明如下
如果你刚开始一个进程并想使用它的主窗口句柄,可以考虑使用WaitForInputIdle方法来让进程完成启动,确保主窗口句柄已经被创建。 否则,将抛出异常。
他们暗示的是,在调用MainWindowHandle
之后, Window
可能需要几秒钟的时间才能显示,即使您可以清楚地看到一个Window
,也会返回IntPtr.Zero
。
请参阅https://msdn.microsoft.com/en-us/library/system.diagnostics.process.mainwindowhandle(v=vs.110).aspx以供参考