怎么判断一个进程是否未响应

怎么判断一个进程是否未响应,第1张

首先要介绍两个主要的函数,能够判断目标进程是否“没有响应”。在User32.dll中(没有文档公开),Win2k/NT下的IsHungAppWindow和Win9X下的IsHungThread;前者是以一个窗口句柄作为参数,后者是以线程ID作为参数。我们可以通过VC开发工具的Depends查到这两个函数。

Windows2000及Windows XP中提供了一个API IsHungAppWindow,但是微软声明此函数可能在后续的Windows版本中删除这个函数。不用遗憾,在Windows 32中有一个特殊的消息WM_NULL,在其文档中说明它可以和SendMessageTimeout一起用于判断某个窗口是否停止了响应。一般来说,我们需要获得进程的标志性窗口(或者叫主窗口)来执行这个判断。2002年7月的MSDN杂志Q&A专栏文章Get the Main Window, Get EXE Name 说明了如何做到这一点。很遗憾,附录中的文章How To Detect If an Application Has Stopped Responding中通过访问浏览器对象的hwnd属性绕过了这个过程,或许是因为在VB中调用EnumWindow比较繁琐;参见附录中的Enumerating Windows Using API(VB)。

另外,.Net Framework中提供了一个Responding属性,可以用于检测进程是否停止了响应。附录中的两篇基于.Net的文章就是检查了这个属性。看起来这似乎是通过检查进程的MainWindowHandle指明的窗口是否立刻响应来解决的。通过这种方法判断的缺点是无法设置等待超时的时间。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8046357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存