Как удалить фокус или свернуть окно с помощью Python?
Мне нужно сосредоточиться на указанном окне, и единственный способ, который я вижу на моей голове, сводит к минимуму все окна перед ним, пока я не получу правильный...
Как я могу это сделать?
Windows 7 и никаких специальных инструментов...
Каждый тип окна, например, firefox и консольная команда
Ответы
Ответ 1
Вам нужно будет перечислять через окна и сопоставлять заголовок окна, чтобы получить тот, который вы хотите. Код ниже выполняет поиск окна с "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)
Ответ 2
Я исхожу из вопроса, что вы хотите написать общее для него, которое может работать с любым окном из любого приложения.
Возможно, вы захотите попробовать библиотеку Python Win32 GUI Automation. Я не использовал его, но похоже, что это может быть то, что вы ищете. Если это не работает, лучшим вариантом может быть forgo python и использовать инструмент, например AutoIt, который обеспечивает встроенную поддержку обработки окон.
Если ни одно из этих решений не работает, вам, вероятно, придется напрямую вызывать windows api. Я не знаю, завершает ли пакет win32api необходимую функциональность, иначе вы будете писать модуль python в c/С++.
Если этот вид функций доступен в .net api, вы можете использовать IronPython.
Ответ 3
Вам нужно будет перечислять через окна и сопоставлять заголовок окна, чтобы получить тот, который вы хотите. Код ниже выполняет поиск окна с "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