按名称返回PID

时间:2013-09-23 20:37:54

标签: c++ process return pid snapshot

我正在尝试返回进程ID,我有这个代码。我做错了什么?

代码是:

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 *'

我如何修复它,我尝试了几次不同的转换,但无法做到。

2 个答案:

答案 0 :(得分:1)

pe32.szExeFile显然是WCHAR字符串,而不是普通的char * C字符串。您需要在比较之前进行转换。或者,将ProcName转换为WCHAR字符串,然后使用宽字符串比较函数。

快速检查Visual Studio documentation表示您可能正在寻找wcscmp功能。

答案 1 :(得分:0)

您正在尝试将宽字符串与窄字符串进行比较。由于ProcName是窄字符串,因此pe32.szExeFile必须是宽字符串。因为Windows内部使用宽字符,所以并不奇怪。您应该将char* ProcName更改为wchar_t* ProcName,并使用wcscmp代替strcmp