按名称返回 PID

Return PID By Name

本文关键字:PID 返回      更新时间:2023-10-16

我正在尝试返回进程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 *'

该如何解决它,我尝试了几种不同的转换,但无法做到。

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

快速检查Visual Studio文档显示您可能正在寻找wcscmp函数。

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