我有以下问题:
我想通过使用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 :(得分: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;
}
}