1. C++中創建進程的代碼示例:
// ProcessDemo.cpp : 此文件包含 "main" 函數。程序執行將在此處開始並結束。 // #include<windows.h> #include <iostream> using namespace std; int main() { STARTUPINFO startupInfo = { 0 }; PROCESS_INFORMATION processInformation = { 0 }; /*打開Word應用程序 C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE 為程序路徑*/ BOOL bSuccess = CreateProcess(TEXT("C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE"), NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &startupInfo, &processInformation); if (bSuccess) { cout << "Process started..." << endl << "ProcessID: " << processInformation.dwProcessId << endl; } else { cout << "Can not start process!" << endl << "Error code: " << GetLastError(); } system("pause"); }
2. 參數說明(_STARTUPINFOW 結構體參數),參考鏈接:http://www.360doc.com/content/14/0514/22/7591436_377668778.shtml
typedef struct _STARTUPINFOW { DWORD cb; //包含STARTUPINFO結構中的字節數.如果Microsoft將來擴展該結構,它可用作版本控制手段.應用程序必須將cb初始化為sizeof(STARTUPINFO) LPWSTR lpReserved; //保留。必須初始化為NULL LPWSTR lpDesktop; //用於標識啟動應用程序所在的桌面的名字。如果該桌面存在,新進程便與指定的桌面相關聯。 //如果桌面不存在,便創建一個帶有默認屬性的桌面,並使用為新進程指定的名字。 //如果lpDesktop是NULL(這是最常見的情況), 那么該進程將與當前桌面相關聯 LPWSTR lpTitle; //用於設定控制台窗口的名稱。如果lpTitle 是NULL,則可執行文件的名字將用作窗口名 DWORD dwX; // 用於設定應用程序窗口在屏幕上應該放置的位置的x 和y 坐標(以像素為單位) // 只有當子進程用CW_USEDEFAULT作為CreateWindow的x參數來創建它的第一個重疊窗口時, // 才使用這兩個坐標。若是創建控制台窗口的應用程序,這些成員用於指明控制台窗口的左上角 DWORD dwY; DWORD dwXSize; //用於設定應用程序窗口的寬度和長度(以像素為單位)只有dwYsize // 當子進程將CW_USEDEFAULT用作 CreateWindow 的 nWidth 參數來創建它的第一個重疊窗口時,才使用這些值。 // 若是創建控制台窗口的應用程序,這些成員將用於指明控制台窗口的寬度 DWORD dwYSize; DWORD dwXCountChars; //用於設定子應用程序的控制台窗口的寬度和高度(以字符為單位) DWORD dwYCountChars; DWORD dwFillAttribute; //用於設定子應用程序的控制台窗口使用的文本和背景顏色 DWORD dwFlags; WORD wShowWindow; //用於設定如果子應用程序初次調用的ShowWindow 將SW_SHOWDEFAULT 作為 // nCmdShow 參數傳遞時,該應用程序的第一個重疊窗口應該如何出現。 // 本成員可以是通常用於 ShowWindow 函數的任何一個 SW_* 標識符 WORD cbReserved2; //保留。必須被初始化為0 LPBYTE lpReserved2; //保留。必須被初始化為NULL HANDLE hStdInput; //用於設定供控制台輸入和輸出用的緩存的句柄。按照默認設置,hStdInput 用於標識鍵盤緩存,hStdOutput 和 hStdError 用於標識控制台窗口的緩存 HANDLE hStdOutput; HANDLE hStdError; } STARTUPINFO, *LPSTARTUPINFO;
dwFlags 使用標志及含義:
標志 | 含義 |
STARTF_USESIZE | 使用dwXSize 和dwYSize 成員 |
STARTF_USESHOWWINDOW | 使用wShowWindow 成員 |
STARTF_USEPOSITION | 使用dwX 和dwY 成員 |
STARTF_USECOUNTCHARS | 使用dwXCountChars 和dwYCount Chars 成員 |
STARTF_USEFILLATTRIBUTE | 使用dwFillAttribute 成員 |
STARTF_USESTDHANDLES | 使用hStdInput 、hStdOutput 和hStdError 成員 |
STARTF_RUN_FULLSCREEN | 強制在x86 計算機上運行的控制台應用程序以全屏幕方式啟動運行 |
3. 參數說明(_PROCESS_INFORMATION 結構體)參考鏈接:https://blog.csdn.net/akof1314/article/details/5471768
typedef struct _PROCESS_INFORMATION { HANDLE hProcess; //存放每個對象的與進程相關的句柄 HANDLE hThread; //返回的線程句柄。 DWORD dwProcessId; //用來存放進程ID號 DWORD dwThreadId; //用來存放線程ID號 } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;