Как убрать фокус или свернуть окно с помощью Python? - PullRequest
5 голосов
/ 08 мая 2010

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

Как я могу это сделать?

Windows 7, и нет специального инструментария ....

Окна любого типа, например, firefox и консольная команда

Ответы [ 3 ]

14 голосов
/ 08 мая 2010

Вам нужно будет перечислить через окна и сопоставить заголовок окна, чтобы получить тот, который вы хотите. Приведенный ниже код ищет окно с «firefox» в заголовке и устанавливает фокус:

import win32gui

toplist = []
winlist = []
def enum_callback(hwnd, results):
    winlist.append((hwnd, win32gui.GetWindowText(hwnd)))

win32gui.EnumWindows(enum_callback, toplist)
firefox = [(hwnd, title) for hwnd, title in winlist if 'firefox' in title.lower()]
# just grab the first window that matches
firefox = firefox[0]
# use the window handle to set focus
win32gui.SetForegroundWindow(firefox[0])

Чтобы свернуть окно, следующая строка:

import win32con
win32gui.ShowWindow(firefox[0], win32con.SW_MINIMIZE)
0 голосов
/ 08 марта 2018

Вам нужно будет перечислить через окна и сопоставить заголовок окна, чтобы получить тот, который вы хотите. Приведенный ниже код ищет окно с «firefox» в заголовке и устанавливает фокус

Чтобы свернуть окно, используйте следующую строку:

def enumHandler(hwnd, lParam):
   if 'firefox' in win32gui.GetWindowText(hwnd):
      win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)

win32gui.EnumWindows(enumHandler, None)

Это работает для Windows 10, Python3.5 32bit, pywin32‑223.


Я сообщил о вышеупомянутом случае, но произошла ошибка.

Traceback (последний последний вызов):

TypeError: объект не является объектом PyHANDLE

0 голосов
/ 08 мая 2010

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

Возможно, вы захотите попробовать библиотеку Python Win32 GUI Automation . Я не использовал его, но, похоже, это то, что вы ищете. Если это не сработает, лучшим вариантом будет отказаться от Python и использовать инструмент, подобный AutoIt , который предоставляет встроенную поддержку для работы с окнами.

Если ни одно из этих решений не работает, вам, вероятно, придется напрямую вызывать windows api. Я не знаю, содержит ли пакет win32api необходимую функциональность, иначе вам придется написать модуль python на языке c / c ++.

Если этот вид функциональности доступен в .net api, вы можете использовать IronPython.

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