Explicação detalhada do pygetwindow
Introdução:
pygetwindow
É uma biblioteca Python para obter, manipular e gerenciar as janelas abertas no momento. Ele fornece alguns métodos comuns de operação de janelas, incluindo obter o identificador da janela, obter a posição e o tamanho da janela, mover e redimensionar janelas, minimizar, maximizar e restaurar janelas e simular entrada e controle de foco, etc.
Instalar
pip install pygetwindow==0.0.9
Explicação detalhada
Obtenha todas as janelas atuais
import pygetwindow as gw
# 获取当前所有窗口
windows = gw.getAllWindows()
for window in windows:
print(window)
Obtenha a janela com o título especificado
import pygetwindow as gw
# 获取指定标题的窗口
title = "计算器"
window = gw.getWindowsWithTitle(title)[0]
print(window)
Obtenha a posição e o tamanho da janela
import pygetwindow as gw
# 获取窗口位置和大小
title = "计算器"
window = gw.getWindowsWithTitle(title)[0]
print(window.left, window.top, window.width, window.height)
Mover e redimensionar janelas
import pygetwindow as gw
# 移动和调整窗口大小
title = "计算器"
window = gw.getWindowsWithTitle(title)[0]
window.moveTo(0, 0)
window.resizeTo(800, 600)
Minimize, maximize e restaure janelas
import pygetwindow as gw
# 最小化、最大化和还原窗口
title = "计算器"
window = gw.getWindowsWithTitle(title)[0]
# 最小化窗口
window.minimize()
# 最大化窗口
window.maximize()
# 还原窗口
window.restore()
Simular entrada de teclado e cliques do 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) # 模拟鼠标左键单击
janela de pesquisa
Você pode usar findTopWindow()
o método para localizar a janela de nível superior com base no nome da classe ou no título da janela, ou pode usar getWindows()
o método para obter todas as janelas e percorrer para encontrar uma janela específica.
import pygetwindow as gw
Encontre janelas de nível superior com base nos títulos das janelas
window = gw.findTopWindow(title='My Window')
Iterar por todas as janelas para encontrar uma janela específica
for window in gw.getWindows():
if 'My Window' in window.title:
print(window.title)
Enviar eventos de teclado e mouse
Você pode usar o keydown()
método keyup()
para enviar eventos de teclas, usar click()
o método para enviar eventos de clique do mouse e usar dragTo()
o método para enviar eventos de arrastar do 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)
janela em cima
Você pode usar setAlwaysOnTop()
o método para trazer a janela para o topo.
import pygetwindow as gw
# 根据窗口标题获取窗口对象
window = gw.getWindowsWithTitle('My Window')[0]
# 将窗口置顶
window.setAlwaysOnTop(True)
abrir janela pelo nome da janela
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
Abra a janela de acordo com o processo pid
método um
import win32gui
import win32process
pid = 1234 # 替换成你要打开的进程的PID
# 获取指定进程的主窗口句柄
hwnd = win32gui.FindWindow(None, f"PID:{pid}")
# 获取该进程的线程ID和进程ID
tid, procid = win32process.GetWindowThreadProcessId(hwnd)
# 将该窗口设为前台窗口(激活窗口)
win32gui.SetForegroundWindow(hwnd)
Deve-se observar que este método só é aplicável a sistemas Windows e também precisa executar o programa com privilégios de administrador. Além disso, se o processo tiver múltiplas janelas, talvez seja necessário FindWindow()
especificar um título de janela ou nome de classe mais preciso no método para garantir que a janela correta seja encontrada.
Método dois
import pygetwindow
pid = 1234 # 替换成你要打开的进程的PID
# 找到指定PID的窗口
window = pygetwindow.getWindowsWithTitle(f"PID: {
pid}")[0]
# 激活窗口
window.activate()
Os getWindowsWithTitle()
parâmetros do método podem ser o título da janela, o ID do processo e assim por diante. No exemplo acima, usamos "PID: {pid}"
para encontrar a janela do processo especificado. Se várias janelas elegíveis forem encontradas, você poderá usar o subscrito para selecionar a janela que precisa ser operada.
Deve-se observar que este método só pode ser usado no sistema Windows e o programa precisa ser executado com privilégios de administrador.