Как правильно получить запущенные процессы

int main()
{
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if(hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 proc;
        proc.dwSize = sizeof(PROCESSENTRY32);
        if(Process32First(hSnap, &proc))
        {
            do 
            {
                printf("%s\n", proc.szExeFile);
            } while(Process32Next(hSnap, &proc));
        }
    }

}

На выходе я получаю случайные символы причём за один вывод выводится один символ. Что я делаю нет так и как правильно вывести процессы?


Ответы (1 шт):

Автор решения: Sergey Tatarincev

Вы почти все делаете так как надо. Единственное что надо понимать что вызываться будет не A вариант функции а W (Process32FirstW), которая работает с юникод строками. См https://docs.microsoft.com/en-us/windows/win32/intl/unicode-in-the-windows-api

Соответственно szExeFile в PROCESSENTRY32 будет не char[] а wchar[]

А теперь к вашему коду. Вам необходимо выводить юникод строку, и это делается так

printf("%ls\n", proc.szExeFile);
→ Ссылка