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 に従ってウィンドウを開く

方法 1

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()正しいウィンドウが確実に見つかるように、メソッド内でより正確なウィンドウ タイトルまたはクラス名のパラメーターを指定する必要がある場合があります。

方法 2

import pygetwindow

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

# 找到指定PID的窗口
window = pygetwindow.getWindowsWithTitle(f"PID: {
      
      pid}")[0]

# 激活窗口
window.activate()

メソッドのパラメータgetWindowsWithTitle()には、ウィンドウのタイトル、プロセス ID などを指定できます。上の例では、"PID: {pid}"指定されたプロセスのウィンドウを検索していました。対象となるウィンドウが複数見つかった場合は、添字を使用して操作する必要のあるウィンドウを選択できます。

この方法は Windows システムでのみ使用でき、プログラムは管理者権限で実行する必要があることに注意してください。

おすすめ

転載: blog.csdn.net/weixin_44634704/article/details/129861909