Explicación detallada de pygetwindow
Introducción:
pygetwindow
es una biblioteca de Python para obtener, manipular y administrar las ventanas actualmente abiertas. Proporciona algunos métodos comunes de operación de ventanas, que incluyen obtener el identificador de la ventana, obtener la posición y el tamaño de la ventana, mover y cambiar el tamaño de las ventanas, minimizar, maximizar y restaurar ventanas, y simular el control de entrada y enfoque, etc.
Instalar
pip install pygetwindow==0.0.9
Explicación detallada
Obtener todas las ventanas actuales
import pygetwindow as gw
# 获取当前所有窗口
windows = gw.getAllWindows()
for window in windows:
print(window)
Obtener la ventana con el título especificado
import pygetwindow as gw
# 获取指定标题的窗口
title = "计算器"
window = gw.getWindowsWithTitle(title)[0]
print(window)
Obtener la posición y el tamaño de la ventana
import pygetwindow as gw
# 获取窗口位置和大小
title = "计算器"
window = gw.getWindowsWithTitle(title)[0]
print(window.left, window.top, window.width, window.height)
Mover y cambiar el tamaño de ventanas
import pygetwindow as gw
# 移动和调整窗口大小
title = "计算器"
window = gw.getWindowsWithTitle(title)[0]
window.moveTo(0, 0)
window.resizeTo(800, 600)
Minimizar, maximizar y restaurar ventanas
import pygetwindow as gw
# 最小化、最大化和还原窗口
title = "计算器"
window = gw.getWindowsWithTitle(title)[0]
# 最小化窗口
window.minimize()
# 最大化窗口
window.maximize()
# 还原窗口
window.restore()
Simule la entrada del teclado y los clics del mouse.
import pygetwindow as gw
import time
# 模拟键盘输入和鼠标点击
title = "计算器"
window = gw.getWindowsWithTitle(title)[0]
window.activate() # 激活窗口,使得键盘输入和鼠标操作生效
window.type("123+456=") # 模拟键盘输入
time.sleep(1) # 等待1秒
window.mouseClick(button="left", x=50, y=50) # 模拟鼠标左键单击
ventana de búsqueda
Puede usar findTopWindow()
el método para encontrar la ventana de nivel superior según el nombre de la clase o el título de la ventana, o puede usar getWindows()
el método para obtener todas las ventanas y recorrerlas para encontrar una ventana específica.
import pygetwindow as gw
Encuentre ventanas de nivel superior según sus títulos
window = gw.findTopWindow(title='My Window')
Iterar por todas las ventanas para encontrar una ventana específica
for window in gw.getWindows():
if 'My Window' in window.title:
print(window.title)
Enviar eventos de teclado y mouse
Puede usar el keydown()
método keyup()
para enviar eventos clave, usar click()
el método para enviar eventos de clic del mouse y usar dragTo()
el método para enviar eventos de arrastre del mouse.
# 根据窗口标题获取窗口对象
window = gw.getWindowsWithTitle('My Window')[0]
# 发送按键事件
window.keyDown('ctrl')
window.keyDown('alt')
window.keyUp('ctrl')
window.keyUp('alt')
# 发送鼠标单击事件
window.click()
# 发送鼠标拖动事件
window.dragTo(500, 500)
ventana en la parte superior
Puede utilizar setAlwaysOnTop()
el método para llevar la ventana a la parte superior.
import pygetwindow as gw
# 根据窗口标题获取窗口对象
window = gw.getWindowsWithTitle('My Window')[0]
# 将窗口置顶
window.setAlwaysOnTop(True)
abrir ventana por nombre de ventana
import win32con
import win32gui
import win32print
def get_real_resolution():
"""获取真实的分辨率"""
hdc = win32gui.GetDC(0)
return win32print.GetDeviceCaps(hdc, win32con.DESKTOPHORZRES), \
win32print.GetDeviceCaps(hdc, win32con.DESKTOPVERTRES)
window_hwnd: list = []
win32gui.EnumWindows(lambda _hwd, param: param.append(_hwd), window_hwnd)
status = False
for hwd in window_hwnd:
if win32gui.GetWindowText(hwd) == 'MAX BOX 3.1.5':
import pygetwindow
width, height = get_real_resolution()
print(f'激活窗口:{width};{height}')
window = pygetwindow.getWindowsWithTitle(f"MAX BOX 3.1.5")[0]
window.activate()
# win32gui.ShowWindow(hwd, win32con.SW_MAXIMIZE)
# win32gui.MoveWindow(hwd, (width - 1750) // 2, (height - 850) // 2, 1750, 850, True)
# status = True
break
Abrir ventana según proceso pid
método uno
import win32gui
import win32process
pid = 1234 # 替换成你要打开的进程的PID
# 获取指定进程的主窗口句柄
hwnd = win32gui.FindWindow(None, f"PID:{pid}")
# 获取该进程的线程ID和进程ID
tid, procid = win32process.GetWindowThreadProcessId(hwnd)
# 将该窗口设为前台窗口(激活窗口)
win32gui.SetForegroundWindow(hwnd)
Cabe señalar que este método solo es aplicable a sistemas Windows y también necesita ejecutar el programa con privilegios de administrador. Además, si el proceso tiene varias ventanas, es posible que deba FindWindow()
especificar un título de ventana o un nombre de clase más preciso en el método para garantizar que se encuentre la ventana correcta.
Método dos
import pygetwindow
pid = 1234 # 替换成你要打开的进程的PID
# 找到指定PID的窗口
window = pygetwindow.getWindowsWithTitle(f"PID: {
pid}")[0]
# 激活窗口
window.activate()
Los getWindowsWithTitle()
parámetros del método pueden ser el título de la ventana, el ID del proceso, etc. En el ejemplo anterior, solíamos "PID: {pid}"
buscar la ventana del proceso especificado. Si se encuentran varias ventanas elegibles, puede utilizar el subíndice para seleccionar la ventana que debe operarse.
Cabe señalar que este método sólo se puede utilizar en el sistema Windows y el programa debe ejecutarse con privilegios de administrador.