Активация окна Python - PullRequest
       1

Активация окна Python

15 голосов
/ 19 января 2010

Как бы я программно активировал окно в Windows, используя Python? Я посылаю на него нажатия клавиш, и в данный момент я просто проверяю, используется ли оно последним приложением, а затем отправляю нажатия клавиш Alt + Tab для переключения на него из консоли DOS. Есть ли лучший способ (поскольку я на собственном опыте узнал, что этот путь ни в коем случае не является надежным)?

Ответы [ 2 ]

36 голосов
/ 19 января 2010

Вы можете использовать модуль win32gui для этого. Для начала вам нужно получить действительный дескриптор вашего окна. Вы можете использовать win32gui.FindWindow, если знаете имя класса окна или точное название. Если нет, вы можете перечислить окна с помощью win32gui.EnumWindows и попытаться найти правильное.

Когда у вас есть ручка, вы можете вызвать win32gui.SetForegroundWindow с помощью ручки. Он активирует окно и будет готов к нажатию клавиш.

См. Пример ниже. Надеюсь, это поможет

import win32gui
import re


class WindowMgr:
    """Encapsulates some calls to the winapi for window management"""

    def __init__ (self):
        """Constructor"""
        self._handle = None

    def find_window(self, class_name, window_name=None):
        """find a window by its class_name"""
        self._handle = win32gui.FindWindow(class_name, window_name)

    def _window_enum_callback(self, hwnd, wildcard):
        """Pass to win32gui.EnumWindows() to check all the opened windows"""
        if re.match(wildcard, str(win32gui.GetWindowText(hwnd))) is not None:
            self._handle = hwnd

    def find_window_wildcard(self, wildcard):
        """find a window whose title matches the wildcard regex"""
        self._handle = None
        win32gui.EnumWindows(self._window_enum_callback, wildcard)

    def set_foreground(self):
        """put the window in the foreground"""
        win32gui.SetForegroundWindow(self._handle)


w = WindowMgr()
w.find_window_wildcard(".*Hello.*")
w.set_foreground()
5 голосов
/ 17 мая 2014

Pywinauto и SWAPY , вероятно, потребует наименьших усилий для установки фокуса окна .

Используйте SWAPY для автоматической генерациикод Python, необходимый для извлечения объекта окна, например:

import pywinauto

# SWAPY will record the title and class of the window you want activated
app = pywinauto.application.Application()
t, c = u'WINDOW SWAPY RECORDS', u'CLASS SWAPY RECORDS'
handle = pywinauto.findwindows.find_windows(title=t, class_name=c)[0]
# SWAPY will also get the window
window = app.window_(handle=handle)

# this here is the only line of code you actually write (SWAPY recorded the rest)
window.SetFocus()

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

# minimize then maximize to bring this window in front of all others
window.Minimize()
window.Maximize()
# now you can set its focus
window.SetFocus()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...