2013-09-23 3 views
1

프로세스 ID를 반환하려고하는데이 코드가 있습니다. 내가 뭘 잘못하고 있니?이름으로 PID를 반환

코드는 다음과 같습니다

DWORD GetProcId(char* ProcName)//Get ProcessId By Name 
{ 
    PROCESSENTRY32 pe32; 
    HANDLE   hSnapshot = NULL; 
    pe32.dwSize = sizeof(PROCESSENTRY32); 
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 

    if(Process32First(hSnapshot, &pe32)) 
    { 
     do{ 
      if(strcmp(pe32.szExeFile, ProcName) == 0) 
      { 
       return pe32.th32ProcessID; 
      } 
     }while(Process32Next(hSnapshot, &pe32)); 
    } 

    if(hSnapshot != INVALID_HANDLE_VALUE) 
     CloseHandle(hSnapshot); 
    return 0; 

} 

그리고 오류가 나는 문제를 해결할 수있는 방법, 나는 몇 가지 변환을 시도했지만 할 수 없었다 'strcmp' : cannot convert parameter 1 from 'WCHAR [260]' to 'const char *'

입니다.

답변

0

넓은 문자열과 좁은 문자열을 비교하려고합니다. ProcName은 좁은 문자열이므로 pe32.szExeFile은 와이드 문자열이어야합니다. Windows는 와이드 문자를 내부적으로 사용하기 때문에 그리 놀랄 일이 아닙니다. char* ProcNamewchar_t* ProcName으로 변경하고 strcmp 대신 wcscmp을 사용해야합니다.

1

pe32.szExeFile은 보통 char * C 문자열 대신 WCHAR 문자열입니다. 비교하기 전에 변환해야합니다. 또는 ProcNameWCHAR 문자열로 변환 한 다음 넓은 문자열 비교 함수를 사용하십시오.

Visual Studio documentation의 빠른 검사는 사용자가 wcscmp 기능을 찾고 있음을 보여줍니다.

+0

+1 ProcName을 wchar *로 변환하려면 OP가 진행되어 잠시 동안 winapi를 처리 할 경우 대부분의 문자열 wchar을 선언해야합니다. – Adam

관련 문제