0

次の問題があります。

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;
}

ただし、マルチバイト文字セットを使用すると、すべて正常に機能します。

4

1 に答える 1

0

entry初期化して値を設定する必要がありdwSizeます。dwSizevalue は 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;
    }
}
于 2016-11-05T18:48:33.253 に答える