Я пытаюсь вернуть идентификатор процесса, и у меня есть этот код. Что я делаю не так?
Код является:
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 *'
Как я могу это исправить, я попробовал несколько разных конверсий, но не смог этого сделать.
Вы пытаетесь сравнить строку широких символов с узкой строкой символов. поскольку ProcName
является узкой символьной строкой, это должно быть pe32.szExeFile
это строка широких символов. Не удивительно, поскольку Windows использует широкие символы внутри. Вы должны изменить char* ProcName
в wchar_t* ProcName
и использовать wcscmp
вместо strcmp
,
pe32.szExeFile
по-видимому WCHAR
строка, а не нормальная char *
C строка. Вам нужно будет конвертировать его перед сравнением. Альтернативно, конвертировать ProcName
к WCHAR
строку, а затем использовать широкую функцию сравнения строк.
Быстрая проверка Документация по Visual Studio показывает, что вы, возможно, ищете wcscmp
функция.