2016-12-23 6 views
0

Представьте, что у меня есть Firefox, и я открываю стартовую страницу Firefox, тогда у меня должно быть окно с заголовком: «Начальная страница Mozilla Firefox - Mozilla Firefox».Как найти ручку окна из имени файла exe

я могу найти дескриптор окна с кодом ниже

HWND hwnd = ::FindWindow(0, _T("Mozilla Firefox Start Page - Mozilla Firefox")); 

Но что я хочу найти дескриптор окна от имени еха окна в этом, как

HWND hwnd = FindWindowFromExe(_T("firefox.exe"));//How to make this function? 

делает окно Апи имеет функцию как FindWindowFromExe()? Если это не так, как лучше всего найти окно из своего exe?

Спасибо за чтение :)

+0

Что вы просматриваете в [MSDN] (http://msdn.microsoft.com) о существовании функций, начинающихся с 'FindWindow'? –

+0

Должно быть возможно перечислить * все * открытые окна из запущенного процесса с достаточными привилегиями. Но получить только одно окно из «exe-файла» невозможно. (Пример: что, если процесс открыт с несколькими окнами? Кроме того, вы знаете, что программа может быть загружена * несколько раз?) Этот комментарий также содержит пару советов: О * запуске процесса ** es *** и примерно * перечисление *. –

+0

[Вот сообщение] (http://stackoverflow.com/q/6806911/62576), в котором показано, как это сделать с помощью WinAPI. Это код Delphi, но API-вызовы также используют работу на C++. –

ответ

3

Там нет одной функции API, чтобы найти окно по имени файла которой он принадлежит процессу. Вам придется искать его вручную.

Вы можете использовать EnumWindows(), чтобы перечислять все окна верхнего уровня или использовать FindWindow()/FindWindowEx(), чтобы найти/перечислить определенные типы окон.

Для каждого окна, вы можете:

или

  • использование GetWindowModuleFileName() для запроса в окно полный путь и имя файла модуля, который его создал (предполагая, что предполагаемое окно создается фактическим EXE, а не DLL, используемых в EXE).

Как только у вас есть имя файла окна, вы можете сравнить его с вашим целевым именем.