如何判断一个应用程序没有响应了呢?下面这是来自MSDN的方法,原理是发一个消息到窗口,如果在指定时间(本例是1000ms)内这个消息得不到处理就认为没有响应。Const SMTO_BLOCK = &H1 Const SMTO_ABORTIFHUNG = &H2 Const WM_NULL = &H0 Const WM_CLOSE = &H10 Dim lngResult As Long Dim lngReturnValue As Long lngReturnValue = SendMessageTimeout(hWnd, WM_NULL, 0&, 0&, SMTO_ABORTIFHUNG And SMTO_BLOCK, 1000, lngResult) If lngReturnValue Then MsgBox "Responding" Else MsgBox "Not Responding","Block tester" End If 需要说明的是,这实际上是判断一个窗口是否停止响应,如果应用程序有多个窗口,就可能出现某些窗口停止响应而另一些窗口正常的情况。这是正常现象。另外,在USER32.DLL里有个未见文档的函数IsHungAppWindow,也是用来判断窗口是否没有响应的。它的原型是 BOOL IsHungAppWindow(HWND hWnd)http://nowcan.yeah.net
Const SMTO_ABORTIFHUNG = &H2
Const WM_NULL = &H0
Const WM_CLOSE = &H10
Dim lngResult As Long
Dim lngReturnValue As Long
lngReturnValue = SendMessageTimeout(hWnd, WM_NULL, 0&, 0&, SMTO_ABORTIFHUNG And SMTO_BLOCK, 1000, lngResult)
If lngReturnValue Then
MsgBox "Responding"
Else
MsgBox "Not Responding","Block tester"
End If
需要说明的是,这实际上是判断一个窗口是否停止响应,如果应用程序有多个窗口,就可能出现某些窗口停止响应而另一些窗口正常的情况。这是正常现象。另外,在USER32.DLL里有个未见文档的函数IsHungAppWindow,也是用来判断窗口是否没有响应的。它的原型是
BOOL IsHungAppWindow(HWND hWnd)http://nowcan.yeah.net