帮我编写能满足以下条件的简洁可行的C++代码:在Windows环境下,创建进程,并显示进程的信息
时间: 2024-12-19 17:13:52 浏览: 7
在Windows环境下,你可以使用`CreateProcess()`函数从C++中创建一个新的进程。以下是一个简单的示例,它创建一个新的命令行窗口并显示一些基本信息:
```cpp
#include <windows.h>
#include <iostream>
// 函数原型声明
DWORD GetProcId(const wchar_t* command);
int main() {
// 创建新进程的命令
wchar_t cmd[] = L"cmd.exe";
// 获取当前进程ID
DWORD currentPid = GetCurrentProcessId();
// 创建新进程
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.lpDesktop = L"default";
si.dwFlags = STARTF_USESHOWWINDOW; // 设置窗口可见
si.wShowWindow = SW_SHOW;
if (!CreateProcess(cmd, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
std::cerr << "Failed to create process!" << std::endl;
return 1;
}
// 显示新进程的基本信息
std::wcout << "New Process ID: " << pi.dwProcessId << std::endl;
std::wcout << "Parent Process ID: " << currentPid << std::endl;
// 等待新进程结束
WaitForSingleObject(pi.hProcess, INFINITE);
// 关闭进程句柄
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return 0;
}
// 辅助函数获取进程ID
DWORD GetProcId(const wchar_t* command) {
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
if (!CreateProcess(command, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
return -1;
}
DWORD procId = pi.dwProcessId;
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return procId;
}
```
这个程序首先创建一个命令行窗口(`cmd.exe`),然后获取其进程ID以及创建它的父进程ID(即主线程的ID)。请注意,`CreateProcess()`函数返回的是新进程的信息结构体,需要通过`WaitForSingleObject()`等待新进程结束后关闭相应的句柄。
阅读全文