Снимок процесса нельзя сравнивать с широкими строками

У меня есть следующая проблема:

Я хочу отслеживать запущенные процессы, используя CreateToolhelp32Snapshot и Process32First / Next. Однако я хочу использовать кодировку Unicode по умолчанию.

bool active( const std::wstring& process_name )
{
HANDLE snapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );

if ( snapshot == INVALID_HANDLE_VALUE )
return false;

PROCESSENTRY32 entry;

if ( Process32First( snapshot, &entry ) )
{
if ( process_name.compare( entry.szExeFile ) == 0 )
{
CloseHandle( snapshot );
return true;
}
}

while ( Process32Next( snapshot, &entry ) )
{
if ( process_name.compare( entry.szExeFile ) == 0 )
{
CloseHandle( snapshot );
return true;
}
}

CloseHandle( snapshot );

return false;
}

int main( )
{
SetConsoleTitle( L"Lel" );

if ( active( L"notepad++.exe" ) )
std::cout << "Hello" << std::endl;
else
std::cout << ":(" << std::endl;
}

Однако, если я использую multibyte-charset, все работает нормально.

0

Решение

Вы должны инициализировать entry и установить dwSize значение. dwSize Значение является идеей Windows по контролю версий и является обязательным:

PROCESSENTRY32 entry = { 0 };
entry.dwSize = sizeof(PROCESSENTRY32);

Сравнение не должно быть чувствительным к регистру:

while (Process32Next(snapshot, &entry))
{
if (_wcsicmp(process_name.c_str(), entry.szExeFile) == 0)
{
CloseHandle(snapshot);
return true;
}
}
0

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

Других решений пока нет …

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