在Windows中,CreateProcess函數用于創建新進程。
使用CreateProcess函數需要包含Windows.h頭文件,并且函數原型如下:
BOOL CreateProcessA(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFOA lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
下面是對參數的解釋:
下面是一個使用CreateProcess函數創建一個新進程的示例:
#include <Windows.h>
#include <iostream>
int main() {
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// 使用CreateProcess函數創建新進程
if (!CreateProcessA("C:\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
std::cout << "CreateProcess failed: " << GetLastError() << std::endl;
return 1;
}
// 等待新進程結束
WaitForSingleObject(pi.hProcess, INFINITE);
// 關閉句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
在上面的示例中,我們使用CreateProcess函數創建一個新的Notepad進程。首先,我們定義了一個STARTUPINFO結構體和一個PROCESS_INFORMATION結構體,然后通過ZeroMemory將這兩個結構體的內存清零。接下來,我們調用CreateProcess函數來創建新的Notepad進程。如果CreateProcess函數調用成功,它將返回一個非零值,并且新進程的句柄和線程句柄將保存在PROCESS_INFORMATION結構體中。我們可以使用WaitForSingleObject函數來等待新的進程結束,然后通過CloseHandle函數關閉進程和線程句柄。
需要注意的是,CreateProcess函數有一個寬字符版本CreateProcessW和一個窄字符版本CreateProcessA。在上面的示例中,我們使用了CreateProcessA函數來創建新進程,這表示我們使用的是窄字符(ASCII)版本。如果需要使用寬字符(Unicode)版本,請使用CreateProcessW函數,并將相關參數的類型更改為寬字符版本。