2011-02-03 100 views
0

下午好,是否有可能通过名称获得WINAPI进程句柄而无需遍历所有进程? 我知道怎么用它的名字通过所有进程迭代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

内部进程维护在一个链表中,因此最终有人需要遍历它们并比较名称。尽管如此,我并不真正看到你的担忧。几百(最极端的)字符串比较不会花费太多时间。 – Luke 2011-02-03 20:53:04

回答

1

每个进程都有一个唯一的ID,但没有唯一的名称。可能有多个具有相同名称的进程。因此,这是不可能的,因为不可能,例如,通过重复所有事情的价值获得来自std::map的输入。然而,你可以做的是编写一个函数,给你一个名称的ID列表,这将是可重用的,但仍然需要迭代。你为什么担心这里的表现?我相信这与开放句柄和过程记忆测量相比没有任何意义。