2011-02-03 2 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

+0

C#에서는 GetProcessesByName을 호출 할 수 있습니까? 관리되지 않는 C++에는 이와 비슷한 것이 있습니까? 도와 줘서 고마워. –

+0

아니요, Win32 API 또는 프레임 워크 (ATL/MFC/등)에 내장되어있는 것과 같은 것이 없습니다. 직접 작성해야합니다. 코드 예제는 충분해야합니다. GetProcessesByName()은 커버 아래의 것과 비슷한 것을 수행합니다. – Luke

답변

1

각 프로세스에는 고유 한 ID가 있지만 고유 한 이름은 없습니다. 같은 이름의 프로세스가 여러 개있을 수 있습니다. 예를 들어 std::map에서 모든 항목을 반복하는 값을 사용하여 항목을 가져 오는 것은 불가능하므로 불가능합니다. 그러나 할 수있는 일은 재사용 할 수 있지만 여전히 반복해야하는 이름으로 ID 목록을 제공하는 함수를 작성하는 것입니다. 왜 여기서 성과에 대해 걱정합니까? 나는 그것이 핸들의 개방과 메모리 측정을 처리하는 것에 비하면 아무것도 아니라고 생각한다.

관련 문제