帮我编写能满足以下条件的简洁可行的C++代码:在Windows环境下,创建进程,并显示进程的信息,如进程ID和进程名
时间: 2024-12-19 17:13:59 浏览: 9
将代码注入到进程中并运行.rar_内存注入_易语言注入进程源码例程_进程注入
在Windows环境中,可以使用`CreateProcess()`函数来创建新的进程,并通过`GetProcessId()`和`GetModuleFileName()`等系统API获取其进程信息。下面是一个简单的C++代码示例:
```cpp
#include <windows.h>
#include <iostream>
// 获取进程ID
DWORD GetProcessId(HANDLE process) {
return reinterpret_cast<DWORD>(reinterpret_cast<ULONG_PTR>(process));
}
// 获取进程名称
std::string GetProcessName(DWORD pid) {
char szBuffer[MAX_PATH] = {0};
DWORD result = GetModuleFileName((HMODULE)NULL, szBuffer, MAX_PATH);
if (result == 0 || GetLastError() != ERROR_FILE_NOT_FOUND) {
return "Unknown";
}
std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
return conv.to_bytes(szBuffer).substr(0, result - 1); // 减去'\0'
}
int main() {
// 创建新进程,假设要运行的是notepad.exe
STARTUPINFO si = {};
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcess(TEXT("notepad.exe"), nullptr, nullptr, nullptr, FALSE,
CREATE_NO_WINDOW, nullptr, nullptr, &si, &pi)) {
std::cerr << "Failed to create process: " << GetLastError() << std::endl;
return 1;
}
try {
// 获取并打印进程ID和名称
DWORD childPid = GetProcessId(pi.hProcess);
std::cout << "Child Process ID: " << childPid << std::endl;
std::cout << "Process Name: " << GetProcessName(childPid) << std::endl;
} catch (...) {
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
throw;
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return 0;
}
```
这个程序首先创建了一个名为`notepad.exe`的新进程,然后分别获取了该进程的ID和名称。注意,在实际使用中,你需要处理可能出现的各种错误情况。
阅读全文