python: abre la ventana de acuerdo con el nombre de la ventana de Windows y procesa el pid (explicación detallada de pygetwindow)

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.

Supongo que te gusta

Origin blog.csdn.net/weixin_44634704/article/details/129861909
Recomendado
Clasificación