Как удалить фокус или свернуть окно с помощью 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