2017-01-20 6 views
1

Я могу использовать FindWindow, но имя окна меняется каждый раз, когда я его открываю. Так что мой вопрос, как я могу либо:Как найти PID окна, содержащего X

A) Найдите PID окна, которое содержит

B «X») Найдите PID окно с именем файла ех?

Извините, если вопрос очевиден, новый для C++. Заранее спасибо!

ответ

3
  1. Попробуйте использовать EnumWindows, чтобы получить все окна ручки
  2. Проверить состояние окон ручки от IsWindowVisible. Because some invisible windows can hang the call to GetWindowText
  3. Получите название каждого окна по GetWindowText. Затем проверьте, что заголовок содержит «X», какие символы или строки вы хотите.
  4. Get PID из него GetWindowThreadProcessId

О B /, вы можете получить имя исполняемого файла, GetWindowModuleFileName через его окна ручкой.

+0

Шаг 2 ('IsWindow()') не требуется внутри обратного вызова перечисления. Может быть, вы думаете о 'IsWindowVisible()' вместо этого? –

+2

Ваше обновление [цитирование чужого комментария] (http://stackoverflow.com/questions/797967/how-to-stop-enumwindows-running-infinitely-win32/798003#comment14193164_798003) без основы. Видимость окна не влияет на «GetWindowText()». И фактически, если окно принадлежит другому процессу, ['GetWindowText()' ** cant ** зависает] (https://blogs.msdn.microsoft.com/oldnewthing/20030821-00/?p=42833), по дизайну. Единственный способ, которым он может зависать, - это окно, принадлежащее вашему собственному процессу, и очередь сообщений окна не обрабатывается. Это будет ошибкой в ​​вашем собственном коде. –