Как сделать окно активным? Python
У меня есть несколько (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.