【问题标题】:Return PID By Name按名称返回 PID
【发布时间】:2013-09-23 20:37:53
【问题描述】:

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

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

【问题讨论】:

    标签: c++ process return pid snapshot


    【解决方案1】:

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

    快速检查Visual Studio documentation 表明您可能正在寻找wcscmp 函数。

    【讨论】:

    • +1 为了将 ProcName 转换为 wchar*,OP 应该继续并声明大多数字符串 wchar,如果他要处理一段时间的 winapi。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 2010-12-08
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多