检查Windows应用程序的“活跃度”?

时间:2012-03-13 20:09:03

标签: python windows winapi pywin32

我有一个运行一些昂贵设备的Windows应用程序;这个应用程序以各种创造性方式死亡。通常情况下,过程完全消失。我编写了一个小程序监控程序,该程序在当前正在运行的事物列表中查找进程的名称,这对于那些失败非常有用。但有时它只是变得完全没有响应,需要通过任务管理器终止,但仍然在某种无益的意义上“运行”。

我对Windows API完全不熟悉,所以这可能是相当长的一段时间,但我能以编程方式检查其他进程的“活跃度”吗?或者我可能会用它做猜测? (注意它停止处理来自操作系统的事件,或者所有磁盘访问/内存分配停止等等)

最好是我可以通过Python win32模块做的事情,但我会分支到任何可以成功检测到这个东西锁定的东西。并且,我意识到“活泼”是模糊的,但我不想排除任何东西,特别是当我对这件事真的失败没有任何见解时。

2 个答案:

答案 0 :(得分:4)

我认为最好的解决方法是使用WIN32 API中的Process & Thread functions。注意:您可以轻松地在Python中嵌入C ++代码。这可能需要一些时间和耐心,而且我自己也不了解大部分这些功能。

另一方面,CodeProject上有Process Monitoring的详细项目和python中WMI的包装器Python WMI,但是请记住WMI非常慢,你必须确保服务正在运行在PC上。

您也可能send a message to the process会导致进程提供回复或更改状态(如果它处于活动状态),然后在此过程中检查此更改一段时间。

答案 1 :(得分:3)

您需要获得有问题窗口的HWND句柄(EnumWindowHandles可能是一个好的开始),然后尝试调用IsHungAppWindow来查看系统是否认为它没有响应。