在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函数,并将相关参数的类型更改为宽字符版本。