У меня есть следующая проблема:Процесс снимок не может сравниваться с широкими строками
Я хочу, чтобы следить за запущенными процессами с помощью CreateToolhelp32Snapshot и Process32First/Далее. Однако я хочу использовать кодировку 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, все работает нормально.
Спасибо. Не могли бы вы объяснить, почему проблема возникает, когда я использую кодировку Unicode? – Cyrex1337
Переменные должны быть инициализированы, как описано в документации поставщика, иначе это приведет к неопределенному поведению. Иногда неправильная реализация может работать исправно, я не знаю, почему, вы можете задать другой вопрос. –