0


python --根据windows窗口名称、进程pid打开窗口(pygetwindow详解)

pygetwindow详解

简介:

pygetwindow

是一个Python库,用于获取、操作和管理当前打开的窗口。它提供了一些常用的窗口操作方法,包括获取窗口句柄,获取窗口位置和大小,移动和调整窗口大小,最小化、最大化和还原窗口,以及模拟输入和焦点控制等。

安装

pip install pygetwindow==0.0.9

详解

获取当前所有窗口

import pygetwindow as gw

# 获取当前所有窗口
windows = gw.getAllWindows()for window in windows:print(window)

获取指定标题的窗口

import pygetwindow as gw

# 获取指定标题的窗口
title ="计算器"
window = gw.getWindowsWithTitle(title)[0]print(window)

获取窗口位置和大小

import pygetwindow as gw

# 获取窗口位置和大小
title ="计算器"
window = gw.getWindowsWithTitle(title)[0]print(window.left, window.top, window.width, window.height)

移动和调整窗口大小

import pygetwindow as gw

# 移动和调整窗口大小
title ="计算器"
window = gw.getWindowsWithTitle(title)[0]
window.moveTo(0,0)
window.resizeTo(800,600)

最小化、最大化和还原窗口

import pygetwindow as gw

# 最小化、最大化和还原窗口
title ="计算器"
window = gw.getWindowsWithTitle(title)[0]# 最小化窗口
window.minimize()# 最大化窗口
window.maximize()# 还原窗口
window.restore()

模拟键盘输入和鼠标点击

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)# 模拟鼠标左键单击

查找窗口

可以使用

findTopWindow()

方法根据类名或者窗口标题查找顶层窗口,也可以使用

getWindows()

方法获取所有窗口并遍历查找特定窗口。

import pygetwindow as gw

根据窗口标题查找顶层窗口

window = gw.findTopWindow(title='My Window')

遍历所有窗口查找特定窗口

for window in gw.getWindows():
    if 'My Window' in window.title:
        print(window.title)

发送键盘、鼠标事件
可以使用

keydown()

keyup()

方法发送按键事件,使用

click()

方法发送鼠标单击事件,使用

dragTo()

方法发送鼠标拖动事件。

# 根据窗口标题获取窗口对象
window = gw.getWindowsWithTitle('My Window')[0]

# 发送按键事件
window.keyDown('ctrl')
window.keyDown('alt')
window.keyUp('ctrl')
window.keyUp('alt')

# 发送鼠标单击事件
window.click()

# 发送鼠标拖动事件
window.dragTo(500, 500)

窗口置顶

可以使用

setAlwaysOnTop()

方法将窗口置顶。

import pygetwindow as gw

# 根据窗口标题获取窗口对象
window = gw.getWindowsWithTitle('My Window')[0]

# 将窗口置顶
window.setAlwaysOnTop(True)

根据窗口名称打开窗口

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

根据进程pid打开窗口

方法一

import win32gui
import win32process

pid = 1234 # 替换成你要打开的进程的PID

# 获取指定进程的主窗口句柄
hwnd = win32gui.FindWindow(None, f"PID:{pid}")

# 获取该进程的线程ID和进程ID
tid, procid = win32process.GetWindowThreadProcessId(hwnd)

# 将该窗口设为前台窗口(激活窗口)
win32gui.SetForegroundWindow(hwnd)

需要注意的是,此方法仅适用于Windows系统,同样需要使用管理员权限运行程序。另外,如果该进程拥有多个窗口,则可能需要在

FindWindow()

方法中指定更准确的窗口标题或类名等参数,以确保找到正确的窗口。

方法二

import pygetwindow

pid =1234# 替换成你要打开的进程的PID# 找到指定PID的窗口
window = pygetwindow.getWindowsWithTitle(f"PID: {pid}")[0]# 激活窗口
window.activate()

其中

getWindowsWithTitle()

方法的参数可以是窗口的标题、进程ID等。上述示例中,我们通过

"PID: {pid}"

来找到指定进程的窗口。如果找到了多个符合条件的窗口,可以通过下标来选择需要操作的窗口。

需要注意的是,这种方法只能在Windows系统下使用,并且需要使用管理员权限运行程序。


本文转载自: https://blog.csdn.net/weixin_44634704/article/details/129861909
版权归原作者 像风一样的男人@ 所有, 如有侵权,请联系我们删除。

“python --根据windows窗口名称、进程pid打开窗口(pygetwindow详解)”的评论:

还没有评论