2011-02-03 79 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列表,這將是可重用的,但仍然需要迭代。你爲什麼擔心這裏的表現?我相信這與開放句柄和過程記憶測量相比沒有任何意義。