是否可以通过进程名称获取WINAPI进程句柄,而无需遍历所有进程

时间:2011-02-03 20:42:04

标签: c++ windows

下午好,是否有可能通过名称获取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);   

但是,似乎需要花费大量时间来遍历流程快照。谢谢。

1 个答案:

答案 0 :(得分:1)

每个进程都有唯一的ID,但不是唯一的名称。可能有多个具有相同名称的进程。因此,不可能,例如,不可能通过值来获取std::map的值,而不是通过一切迭代。但是,您可以执行的操作是编写一个函数,该函数按名称提供ID列表,这些函数将是可重用的,但仍需要迭代。你为什么担心这里的表现?我相信与打开手柄和处理内存测量相比,它无关紧要。