C++获取所有非系统进程ID
时间: 2024-10-03 17:03:29 浏览: 33
C++基于CreateToolhelp32Snapshot获取系统进程实例
在C++中,你可以通过Windows API函数如`CreateToolhelp32Snapshot`、`Process32First`和`Process32Next`来获取当前计算机上运行的所有进程,包括用户进程而非系统进程。但是,直接获取系统进程的PID通常不是必要的,因为它们的权限级别较高,普通用户程序很难获取。
以下是一个简单的示例,展示如何使用`std::vector<int>`来存储进程ID:
```cpp
#include <windows.h>
#include <tchar.h>
#include <vector>
std::vector<int> getAllUserProcesses() {
std::vector<int> processIds;
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (snapshot == INVALID_HANDLE_VALUE) {
// 处理错误
return processIds;
}
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(snapshot, &pe32)) {
// 处理错误
CloseHandle(snapshot);
return processIds;
}
do {
if (pe32.th32ProcessID > 0 && !IsSystemProcess(pe32.th32ProcessID)) { // 非系统进程
processIds.push_back(pe32.th32ProcessID);
}
} while (Process32Next(snapshot, &pe32));
CloseHandle(snapshot);
return processIds;
}
bool IsSystemProcess(DWORD pid) {
HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) {
return true; // 假定默认情况下,非管理员进程被视为非系统进程
}
DWORD tokenId;
if (!GetTokenInformation(hToken, TokenIsSystemProcess, &tokenId, sizeof(tokenId), NULL)) {
CloseHandle(hToken);
return false; // 如果无法获取信息,认为可能是系统进程
}
CloseHandle(hToken);
return tokenId != 0;
}
阅读全文