關閉進程的方法

關閉進程的方法有很多^_^,分爲進程內部關閉(自殺^_^)和外部關閉。 內部關閉可以用ExitProcess();如下:

ExitProcess(0); // “0”這裏代表關閉時的代碼

這條語句能夠比較徹底的關閉一個進程,但是要注意不能夠在dll內部使用,否則將導致不可預料的程序或者系統錯誤。
如果是在程序外關閉此程序,該程序是用CreateProcess();語句創建並且PROCESS_INFORMATION結構中定義了線程的ID號,那麼可以向該程序主線程發送WM_CLOSE消息。如下:

PostThreadMessage(piProcessInfo.dwThreadId, WM_CLOSE, 0, 0);

這種情況只適用於該主線程已經建立了消息隊列,否則函數將執行失敗。那麼如何解決呢?(嘿嘿,放心^_^)強制性關閉它!代碼如下:
        
PostThreadMessage(piProcessInfo.dwThreadId, WM_CLOSE, 0, 0);
WaitForSingleObject(piProcessInfo.hProcess, 1000);

DWORD dwExitCode = 0;
GetExitCodeProcess(piProcessInfo.hProcess, &dwExitCode);
if(dwExitCode == STILL_ACTIVE)
{
  TerminateProcess(piProcessInfo.hProcess, 0);
}

TerminateProcess()有個缺點,它只能關閉主線程,如果該程序調用了DLL,那麼子線程不會被關閉。
因此TerminateProcess()只能用於特定的環境下。而將WM_CLOSE改換WM_QUIT就會在一般情況下運行了^_^。
發佈了22 篇原創文章 · 獲贊 5 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章