Вернуться 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 *'

Как я могу это исправить, я попробовал несколько разных конверсий, но не смог этого сделать.

1

Решение

Вы пытаетесь сравнить строку широких символов с узкой строкой символов. поскольку ProcName является узкой символьной строкой, это должно быть pe32.szExeFile это строка широких символов. Не удивительно, поскольку Windows использует широкие символы внутри. Вы должны изменить char* ProcName в wchar_t* ProcNameи использовать wcscmp вместо strcmp,

0

Другие решения

pe32.szExeFile по-видимому WCHAR строка, а не нормальная char * C строка. Вам нужно будет конвертировать его перед сравнением. Альтернативно, конвертировать ProcName к WCHAR строку, а затем использовать широкую функцию сравнения строк.

Быстрая проверка Документация по Visual Studio показывает, что вы, возможно, ищете wcscmp функция.

1

По вопросам рекламы [email protected]