Как я могу получить дескриптор главного окна в Python? - PullRequest
5 голосов
/ 16 августа 2011

В python я перечисляю окна верхнего уровня через EnumWindows, а также перечисляю процессы через EnumProcesses.

Затем в скрипте python я поместил все дескрипторы окна, принадлежащие одному и тому же pid, в один список (я сделал это через GetWindowThreadProcessId).

Позже я кое-что выяснил: есть 3 дескриптора окна, которые принадлежат notepad.exe, но я открываю только один текстовый файл.

Почему?

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

Как это могло быть?

Ответы [ 2 ]

5 голосов
/ 16 августа 2011

Процессы иногда создают невидимые окна для своих собственных целей.Вы должны игнорировать их (используйте функцию IsWindowVisible).

4 голосов
/ 16 августа 2011

Чтобы исследовать подобные вещи, ваш лучший друг - Spy ++ , который поставляется с несколькими версиями Visual Studio, если вы можете его получить.

В соответствии с этим, notepad.exe создаеттри окна верхнего уровня:

  1. Видимое главное окно, имя класса «Блокнот», перекрытое.
  2. Скрытое, отключенное всплывающее окно, имя класса «MSCTFIME UI», заголовок "M".
  3. Еще одно скрытое, отключенное всплывающее окно, имя класса "IME", заголовок "IME по умолчанию".

Два скрытых окна используются внутреннес помощью блокнота для реализации IME (редактор метода ввода), графический интерфейс для ввода сложных сценариев.

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

...