Windows 3.1允許程序員用GetModuleUsage()函數(shù)來測試一個程序或模塊是否仍在運(yùn)行。但在Windows95及Windows NT下,每個程序都獨(dú)立地運(yùn)行在單獨(dú)的環(huán)境中,因此就排除了測試過程的狀態(tài)。
Microsoft 提供了少量的函數(shù),如:WaitForSingleObject和 WaitForMultipleObjects 來完成該功能。盡管如此,這些函數(shù)并不是時時都有效。舉例來說,如果你調(diào)用WaitForSingleObject函數(shù)監(jiān)測Internet Explorer的運(yùn)行,同時你又選擇了“幫助”菜單中的“教程”項,結(jié)果將會是系統(tǒng)死鎖,你不得不終止WaitForSingleObject函數(shù)的運(yùn)行。造成這種結(jié)果的 原因是你點(diǎn)選了“教程”后,會返回給Internet Explorer一個地址,告訴瀏覽器轉(zhuǎn)到下一個網(wǎng)址。這種情況通常發(fā)生在一個程序是由調(diào)用它的父程序中的一個過程或?qū)ο笏鶈?,反過來卻要等待父程序的結(jié)束。
本文的目的就是要解決這個問題。
Declare
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess&, ByVal bInherithandle&, ByVal dwProcessid&) As Long
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpexitcode As Long) As Long
' Required Constants
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
Code
Sub ShellWait(cCommandLine As String)
Dim hShell As Long
Dim hProc As Long
Dim lExit As Long
hShell = Shell(cCommandLine, VBNormalFocus)
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell)
Do
GetExitCodeProcess hProc, lExit
DoEvents
Loop While lExit = STILL_ACTIVE
End Sub
調(diào)用 ShellWait,控制權(quán)將不會交給一個過程,直到調(diào)用該過程的程序結(jié)束
Microsoft 提供了少量的函數(shù),如:WaitForSingleObject和 WaitForMultipleObjects 來完成該功能。盡管如此,這些函數(shù)并不是時時都有效。舉例來說,如果你調(diào)用WaitForSingleObject函數(shù)監(jiān)測Internet Explorer的運(yùn)行,同時你又選擇了“幫助”菜單中的“教程”項,結(jié)果將會是系統(tǒng)死鎖,你不得不終止WaitForSingleObject函數(shù)的運(yùn)行。造成這種結(jié)果的 原因是你點(diǎn)選了“教程”后,會返回給Internet Explorer一個地址,告訴瀏覽器轉(zhuǎn)到下一個網(wǎng)址。這種情況通常發(fā)生在一個程序是由調(diào)用它的父程序中的一個過程或?qū)ο笏鶈?,反過來卻要等待父程序的結(jié)束。
本文的目的就是要解決這個問題。
Declare
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess&, ByVal bInherithandle&, ByVal dwProcessid&) As Long
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpexitcode As Long) As Long
' Required Constants
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
Code
Sub ShellWait(cCommandLine As String)
Dim hShell As Long
Dim hProc As Long
Dim lExit As Long
hShell = Shell(cCommandLine, VBNormalFocus)
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell)
Do
GetExitCodeProcess hProc, lExit
DoEvents
Loop While lExit = STILL_ACTIVE
End Sub
調(diào)用 ShellWait,控制權(quán)將不會交給一個過程,直到調(diào)用該過程的程序結(jié)束