2009-11-29 88 views
3

我注意到應用程序句柄,當我使用shell函數打開它時。 然後我使用該句柄稍後關閉應用程序。 但是用戶也可以自己關閉另一個應用程序。 那個句柄可以被窗口重用,這樣當我使用該句柄時,我關閉了一個不同的進程。 如果有可能嗎?窗口句柄多久重用

回答

4

不,你不必擔心它。例如,OpenProcess,ShellExecuteEx()或CreateProcess返回的句柄會保持流程對象的活性。這就是在進程終止後調用GetExitCodeProcess()來檢索退出代碼的方式。

該對象直到關閉它的最後一個句柄纔會被釋放。與此線程提供的早期建議相反,調用CloseHandle()會非常重要,否則您將發生泄漏。

+0

謝謝,但我不太關注。內存由於closehandle()而泄漏,不會被調用。一旦執行shell調用的應用程序正確關閉,它會被清除嗎? – jjb 2009-11-29 17:44:24

+0

是的,Windows清理未關閉的手柄。不要讓它那麼遠。 – 2009-11-29 18:01:59

+0

不會只是調用sendmessage 調用sendMessage(intHandle,const_CLOSE,0&,0&) 都clse應用程序並執行工作closehandle()在同一時間? – jjb 2009-11-29 18:03:15

3

您可以等待進程句柄來確定它何時退出。

WaitForSingleObject(hProcess,INFINITE);

一旦這個返回,你知道進程已經退出,你不需要關閉它。

+3

不,請調用CloseHandle()來避免泄漏。 – 2009-11-29 17:21:31

+0

感謝這一點,但似乎該句柄將不會重用,因爲它保持打開,直到執行shell命令的應用程序關閉它。 – jjb 2009-11-29 18:25:30