Option Explicit'这个程序使用来判断其它程序是否失去响应. '首先建立新工程,在窗体上放置三个CommandButton,将NAME属性设为 cmdLauch\cmdKill\cmdCheck '运行程序,点击 cmdLauch 可以执行浏览器程序,点击 cmdKill 检测程序是否失去响应,点击 cmdCheck 关闭程序. Private Const SMTO_ABORTIFHUNG = &H2 Private Const SMTO_BLOCK = &H1 Private Const WM_CLOSE = &H10 Private Const WM_NULL = &H0 Private Const STANDARD_RIGHTS_REQUIRED = &HF0000 Private Const SYNCHRONIZE = &H100000 Private Const PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As LongPrivate modObjIE As Object Private modlngWndIE As LongPrivate Sub cmdCheck_Click() Dim lngResult As Long Dim lngReturnValue As Long
第11期的《程序员》上面有!
'首先建立新工程,在窗体上放置三个CommandButton,将NAME属性设为 cmdLauch\cmdKill\cmdCheck
'运行程序,点击 cmdLauch 可以执行浏览器程序,点击 cmdKill 检测程序是否失去响应,点击 cmdCheck 关闭程序.
Private Const SMTO_ABORTIFHUNG = &H2
Private Const SMTO_BLOCK = &H1
Private Const WM_CLOSE = &H10
Private Const WM_NULL = &H0
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const SYNCHRONIZE = &H100000
Private Const PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As LongPrivate modObjIE As Object
Private modlngWndIE As LongPrivate Sub cmdCheck_Click() Dim lngResult As Long
Dim lngReturnValue As Long
lngReturnValue = SendMessageTimeout(modlngWndIE, WM_NULL, 0&, 0&, SMTO_ABORTIFHUNG And SMTO_BLOCK, 1000, lngResult)
If lngReturnValue Then
MsgBox "程序运行正常"
Else
MsgBox "程序失去响应"
End If
End SubPrivate Sub cmdKill_Click() Dim lngProcessID As Long
Dim lngReturnValue As Long
Dim lngProcess As Long
lngReturnValue = GetWindowThreadProcessId(modlngWndIE, lngProcessID)
lngProcess = OpenProcess(PROCESS_ALL_ACCESS, 0&, lngProcessID)
lngReturnValue = TerminateProcess(lngProcess, 0&)End SubPrivate Sub cmdLauch_Click()
Set modObjIE = Nothing
Set modObjIE = CreateObject("InternetExplorer.Application")
modObjIE.Visible = False
modObjIE.Navigate2 "http://www.microsoft.com"
modlngWndIE = modObjIE.hwnd
End Sub
完啦,又一个“格朗台”!!