即使没有退出,检测进程(GUI)何时“完成”?

时间:2011-10-28 21:31:14

标签: c# c#-4.0

我正在编写一个控制台应用程序来检测USB驱动器,格式化它们,然后运行一个名为UnetBootin的程序来为驱动器写入ISO。一切正常,但问题是UNetbootin并不是简单地“退出”所以.WaitForExit()不起作用,除非用户点击“退出”按钮。

我能想象解决这个问题的唯一方法是检查该按钮是否出现,或者试图猜测该过程是否以某种方式空转。在任何一种情况下,我都不知道从哪里开始。

enter image description here

1 个答案:

答案 0 :(得分:0)

无论你如何切片,这都会很难看。我不知道一个更好的方法,所以这里有一个可以工作的AFAIK:

  1. 获取目标流程的PID(如果可以调用WaitForExit
  2. ,则已经拥有该PID)
  3. 获取handles to all windows of that process
  4. 从第2步
  5. 使用GetWindowTextget the text of each and every window
  6. 如果任何窗口的文本等于“立即重启”,则表示您已完成
  7. 警告:此时我应该提到GetWindowText应该被认为是非常危险的,因为它可以为你的线程做坏事,包括挂起它,因为你自己没有错。 在实践中它不会发生,但这是你应该知道的。