Получить имя программы из пути к исполняемому файлу (или из hWnd, или из pid) в C ++ - PullRequest
4 голосов
/ 28 июня 2011
  • У меня есть HWND окна,
  • с GetWindowThreadProcessId я получаю pid его процесса,
  • и с помощью GetModuleFileNameEx я получаю путь к исполняемому файлу (я использую PathFindFileName, чтобы получить имя исполняемого файла ).

Однако я могуКажется, что не найти способ (если есть), чтобы получить имя программы.Например, для исполняемого файла chrome.exe мне бы хотелось получить имя «Google Chrome».

Не могли бы вы мне помочь?

Редактировать:

Спасибо вам всем!Используя рекомендации, которые вы рекомендовали, я пришел к следующему:

CString csProductName;
DWORD cbFileVersionInfo = GetFileVersionInfoSize(pszProcessPath, NULL);
if (cbFileVersionInfo)
{
    BYTE *fileVersionInfo = new BYTE[cbFileVersionInfo];
    TCHAR *pszFileDesc = NULL;
    DWORD cchFileDesc;

    if (GetFileVersionInfo(pszProcessPath, 0, cbFileVersionInfo, fileVersionInfo))
    {
        CString csFileDescSubBlock;
        csFileDescSubBlock.Format(L"\\StringFileInfo\\040904E4\\ProductName");

        DWORD cbLanguageInfoSize = VerQueryValue(fileVersionInfo,
            csFileDescSubBlock.GetString(), 
            (LPVOID*)&pszFileDesc, 
            (PUINT)&cchFileDesc);
    }

    csProductName = pszFileDesc;
    delete[] fileVersionInfo;
}

..., который работает как ожидалось ... но только для приложения, вызывающего его,Если имя исполняемого файла является другим, оно возвращает null, а cchFileDesc имеет значение 0.

Я прочитал, что "Если указанная структура информации о версии существует, и информация о версии доступна , возвращаемое значение отлично от нуля. "Возможно ли, что у меня недостаточно прав для чтения этой информации?Поскольку он действительно существует - диспетчер задач печатает его для деталей процесса.Зависит ли вызов этих функций от чего-либо еще, кроме пути процесса?

Ответы [ 2 ]

3 голосов
/ 28 июня 2011
1 голос
/ 28 июня 2011

Вы можете использовать GetWindowText .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...