下午好,是否有可能通过名称获取WINAPI进程句柄而无需遍历所有进程? 我知道如何通过遍历所有进程来按名称来处理WINAPI进程句柄:
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (Process32First(snapshot, &entry) == TRUE){
while (Process32Next(snapshot, &entry) == TRUE)
{
if (stricmp(entry.szExeFile, ProcessName ) == 0){
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
// measure process memory usage
CloseHandle(hProcess);
}
}
}
CloseHandle(snapshot);
但是,似乎需要花费大量时间来遍历流程快照。谢谢。
答案 0 :(得分:1)
每个进程都有唯一的ID,但不是唯一的名称。可能有多个具有相同名称的进程。因此,不可能,例如,不可能通过值来获取std::map
的值,而不是通过一切迭代。但是,您可以执行的操作是编写一个函数,该函数按名称提供ID列表,这些函数将是可重用的,但仍需要迭代。你为什么担心这里的表现?我相信与打开手柄和处理内存测量相比,它无关紧要。