說明:
參數hHandle是一個事件的句柄,第二個參數dwMilliseconds是時間間隔。如果事件是有信號狀態返回WAIT_OBJECT_0,如果時間超過dwMilliseconds值但時間事件還是無信號狀態則返回WAIT_TIMEOUT。
hHandle可以是下列對象的句柄:
Change notification
Console input
Event
Job
Memory resource notification
Mutex
Process
Semaphore
Thread
Waitable timer
WaitForSingleObject函數用來檢測hHandle事件的信號狀態,當函數的執行時間超過dwMilliseconds就返回,但如果參數dwMilliseconds爲INFINITE時函數將直到相應時間事件變成有信號狀態才返回,否則就一直等待下去,直到WaitForSingleObject有返回值才執行後面的代碼。此外,當dwMilliseconds設置爲特殊值0時,測試hHandle核心對象是否被激發,函數立即返回。
返回值:
WAIT_ABANDONED 0x00000080:當hHandle爲mutex時,如果擁有mutex的線程在結束時沒有釋放核心對象會引發此返回值。
WAIT_OBJECT_0 0x00000000 :核心對象已被激活
WAIT_TIMEOUT 0x00000102:等待超時
WAIT_FAILED 0xFFFFFFFF :出現錯誤,可通過GetLastError得到錯誤代碼。
CloseHandle
位置:
Kernel32.dll
說明 :
關閉一個內核對象。其中包括文件、文件映射、進程、線程、安全和同步對象等。涉及文件處理時,這個函數通常與vb的close命令相似。應儘可能的使用close,因爲它支持vb的差錯控制。注意這個函數使用的文件句柄與vb的文件編號是完全不同的
返回值:
參數表
參數 類型及說明
hObject Long,欲關閉的一個對象的句柄
註解
除非對內核對象的所有引用都已關閉,否則該對象不會實際刪除
位置: Kernel32.dll
說明:
返回值:
如成功,返回值爲指定進程的句柄。
如失敗,返回值爲空,可調用GetLastError獲得錯誤代碼。
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Const SYNCHRONIZE = &H100000
Dim i As Long
Dim r As Long
Dim p As Long
i = Shell("NOTEPAD.EXE", vbNormalFocus)
p = OpenProcess(SYNCHRONIZE, False, i)
r = WaitForSingleObject(p, INFINITE)
r = CloseHandle(p)
MsgBox "記事本已經關閉"
End Sub
運行該程序得到如下畫面: