2013-09-23 87 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* ProcName更改爲wchar_t* ProcName,並使用wcscmp而不是strcmp

1

pe32.szExeFile顯然是一個WCHAR字符串,而不是一個正常的char * C字符串。在比較之前,您需要將其轉換。或者,將ProcName轉換爲WCHAR字符串,然後使用寬字符串比較函數。

Visual Studio documentation的快速檢查表明您可能正在尋找wcscmp函數。

+0

+1對於將ProcName轉換爲wchar *,OP應該繼續,如果他將要處理winapi一段時間,則聲明大多數字符串wchar。 – Adam