Win32開發入門(17):啟動和結束進程

來源:互聯網
上載者:User

這裡我再次說明一下,我不知道為什麼,現在的人那麼喜歡走極端,估計是價值觀都“升級”了的 緣故吧。

我撰寫這一系列Win32相關的文章,並不是叫大家一定要用Win32去開發項目,僅僅是 給大家瞭解一下,Win32是個啥東西而已。

另外,在專訪中,有些人也誤認為我說C++非學不可 ,那也不是,我也提到過了,C++的學習可以使你懂得更多知識,為你以為學習各種技術打下基礎。

今天,我們來瞭解一下,在應用程式中,如何啟動一個進程,然後把這個進程結束掉。實現這 一功能有替代方案,即使用.NET庫中的System::Diagnostics::Process類來完成。在Win32中,啟動一 個進程可以理解為建立進程,所以可以調用CreateProcess函數,結束進程則調用TerminateProcess函 數。

唯一標識一個進程的是PID,而我們要對進程進行各項操作,進程也存在於記憶體中,也可以 視為一種資源,我們知識,操作表徵圖資源有HICON,操作位元影像資源有HBITMAP,同樣道理,對進程所作的 操作也要通過一個標識符(控制代碼)——HANDLE。

CreateProcess函數的最後一個參數是一個指向 PROCESS_INFORMATION結構體的指標,該結構的成員可以儲存被建立進程的ID和控制代碼。

typedef struct _PROCESS_INFORMATION {         HANDLE hProcess; //進程的控制代碼         HANDLE hThread; //主線程的控制代碼         DWORD dwProcessId; //進程ID         DWORD dwThreadId; //主線程ID     } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;

接下來我們要 對已建立進程進行的一系列操作,都以hProcess為紐帶,包括擷取退出碼和終止進程。

CreateProcess函數的最後兩個參數都是指標,因此我們在使用時,要先定義STARTUPINFO和 PROCESS_INFORMATION類型的變數,並使用ZeroMemory函數將其成員初始化。ZeroMemory函數可以將一 段記憶體中的資料初始化為0.

範例程式碼如下:

PROCESS_INFORMATION pro_info; //進程資訊     STARTUPINFO sti; //啟動資訊     //......     // 初始化兩個結構體     ZeroMemory(&pro_info, sizeof(PROCESS_INFORMATION));     ZeroMemory(&sti, sizeof(STARTUPINFO));

接著調用CreateProcess建立進程.

CreateProcess(L"C:\\Windows\\System32\\calc.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&sti,&pro_info);

調用成功後,PROCESS_INFORMATION結構體的hProcess就儲存了被建立的進程的控制代碼了。

要結 束進程,調用TerminateProcess函數,第一個參數就是剛才建立的時程的控制代碼,第二個參數是退出碼, 通過GetExitCodeProcess函數可以擷取。

DWORD exitCode; //退出碼     //.........     GetExitCodeProcess(pro_info.hProcess,&exitCode); //擷取退出碼     TerminateProcess(pro_info.hProcess, exitCode);     // 關閉控制代碼     CloseHandle(pro_info.hThread);     CloseHandle(pro_info.hProcess);

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。