Как сделать окно активным? Python

Рейтинг: 0Ответов: 1Опубликовано: 30.06.2023

У меня есть несколько (10-12) окон с одинаковым названием процесса. Их айди я сохраняю в глобальный массив pid_list. Далее мне нужно по очереди делать эти окна активными и выполнять там определенные задачи. Как я могу сделать их активными через pid?

def main():
   for proc in psutil.process_iter():
        if proc.name() == MY_PROCESS_NAME:
            print(proc)
            pid = proc.pid
            pid_list.append(pid)
            activate_window_by_pid(pid)

def activate_window_by_pid(pid):
...

Ответы

▲ 1Принят

Для активации окна по его PID можно использовать библиотеку win32gui и функцию SetForegroundWindow. Вот пример кода:

import win32gui

def activate_window_by_pid(pid):
    try:
        hwnd = win32gui.FindWindow(None, None)  # Должно вернуть hwnd последнего активного окна
        while hwnd:
            cur_pid = win32gui.GetWindowThreadProcessId(hwnd)[1]
            if cur_pid in pid_list:
                win32gui.SetForegroundWindow(hwnd)
                break
            hwnd = win32gui.GetWindow(hwnd, win32con.GW_HWNDNEXT)
    except Exception as e:
        print("Ошибка:", e)

В этом примере мы используем функцию FindWindow, чтобы найти hwnd последнего активного окна. Затем мы перебираем окна с помощью функции GetWindow, начиная с этого hwnd, и проверяем, является ли PID окна из списка pid_list. Если да, мы активируем его, вызывая функцию SetForegroundWindow.

Убедитесь, что вы установили пакет pywin32, чтобы использовать эту библиотеку. Вы можете установить его с помощью команды pip install pywin32.