Как узнать имя окна программы в windows

Обновлено: 04.07.2024

Я пытаюсь получить имя исполняемого файла имя всех моих запущенных окон, и моя проблема в том, что:

Я использую метод

и я не понимаю, почему он не работает.

данные, которые у меня есть около окна:
- HWND И PROCESSID

Примечание: тест.exe-это имя моего исполняемого файла, но это не полный путь Notepad++. и это делает это для Mozilla Thunderbird тоже. Не понимаю почему!--4-->

Я использую функцию следующим образом:

Спасибо за ваш ответ.

функция работает только для windows в текущем процессе.1 вы должны сделать следующее.

  1. получить процесс окна с GetWindowThreadProcessId .
  2. откройте процесс с правами доступа PROCESS_QUERY_INFORMATION и PROCESS_VM_READ, используя OpenProcess .
  3. использовать GetModuleFileNameEx на процесс обработки.

Аааа. Я прочитал страницу MSDN внизу.

GetWindowModuleFileName и GetModuleFileName правильно получить информация АБ. GetWindowModuleFileName и GetModuleFileName правильно получить сведения о windows и модулях в процессе вызова. В Windows 95 и 98, они возвращают информацию о windows и модули в другом процессы. Однако, в Windows NT 4.0 с и Windows 2000, так как модуль ручки больше не являются общими для всех процессов как они были в Windows 95 и 98, эти API не возвращают информацию о windows и модулях в другом процессы.

для получения дополнительной информации о Windows 2000, используйте помощник состояния процесса набор API (известный как PSAPI, см. Psapi.h включить файл), доступный с Windows NT 4.0. API, такие как GetModuleFileNameEx и Эквивалент предложения GetModuleBaseName функциональность.

и по страница MSDN на GetWindowModuleFileName вы, кажется, называя ее правильно, и если исполняемый файл находится в корне C: он возвращает правильное значение:

функция GetWindowModuleFileName извлекает полный путь и имя файла модуля, связанного с указанным дескриптором окна.

что вы ожидаете получить обратно?

резюме: GetWindowModuleFileName не работает для windows в других процессах в Windows на основе NT.

вместо этого вы можете использовать QueryFullProcessImageName Если у вас есть дескриптор процесса. Вы можете получить дескриптор процесса с помощью для открытия процесса, который вы можете использовать если у вас есть идентификатор процесса. Вы можете получить идентификатор процесса из HWND, используя GetWindowThreadProcessId

Это пример того, как получить имя исполняемого файла, который создает окно, надеюсь, это может дать вам некоторые идеи о:

Читайте также: