<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                這里我再次說明一下,我不知道為什么,現在的人那么喜歡走極端,估計是價值觀都“升級”了的緣故吧。 我撰寫這一系列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); ~~~ 下面是這個示例的運行結果圖,完整的代碼我稍后上傳到資源區中。 ![](https://box.kancloud.cn/2016-06-14_575fd310e5db2.PNG) 另外,再介紹一個在應用程序中運行其他程序的方法,那就是使用Shell函數——ShellExecute。 ~~~ HINSTANCE ShellExecute( _In_opt_ HWND hwnd, _In_opt_ LPCTSTR lpOperation, _In_ LPCTSTR lpFile, _In_opt_ LPCTSTR lpParameters, _In_opt_ LPCTSTR lpDirectory, _In_ INT nShowCmd ); ~~~ 我們這里只是運行一個程序,沒有其他操作,所以,帶 _In_opt_的可選參數可以直接NULL,lpFile指定我們要運行程序的路徑,如果是一個exe文件,那lpParameters可以指定命令行參數,但我們這里不需要,所以繼續NULL,最后一個參數好理解,和ShowWindow函數一樣。 于是,用ShellExecute函數打開記事本程序,當然記得包含shellapi.h。 ~~~ ShellExecute(NULL,NULL,L"C:\\Windows\\System32\\notepad.exe",NULL,NULL,SW_SHOWNORMAL); ~~~ 看看結果,和前面效果差不多。 ![](https://box.kancloud.cn/2016-06-14_575fd31105b8b.PNG) 源代碼稍后上傳。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看