检测外部进程是否是交互式的并且具有任何可见的UI

时间:2015-02-09 09:48:44

标签: c# .net windows winapi process

我似乎找不到确定Process是否具有用户界面的方法,例如一个窗口,用户可以看到?

我想区分说Notepad和conhost

2 个答案:

答案 0 :(得分:1)

  1. Process实例中找出进程ID。
  2. 使用EnumWindows枚举顶级窗口。
  3. 调用GetWindowThreadProcessId并查看它是否与目标PID匹配。
  4. 致电IsWindowVisible和/或IsIconic,以测试该窗口是否对用户可见。

答案 1 :(得分:1)

关于System.Diagnostics.Process.MainWindowHandle的MSDN文章说明了以下内容

  

如果您刚刚启动了一个进程并希望使用其主窗口句柄,请考虑使用WaitForInputIdle方法来允许进程完成启动,确保已创建主窗口句柄。否则,将抛出异常。

他们暗示的是,Window可能需要几秒钟的时间来呈现MainWindowHandle之后的回复,即使您可以清楚地看到IntPtr.Zero显示Window

请参阅https://msdn.microsoft.com/en-us/library/system.diagnostics.process.mainwindowhandle(v=vs.110).aspx以获取参考资料