Python中如何查找窗口并模拟点击与按键操作?请推荐几个好用的库

请推荐几个好用的 python 库,用来查找窗口,前台或者后台点击窗口或者子窗口,模拟按键等操作窗口的
多谢!


Python中如何查找窗口并模拟点击与按键操作?请推荐几个好用的库
4 回复

pywin32+大漠插件,或者其他类似插件


这个问题在自动化测试和脚本工具开发里很常见。要搞定Windows窗口的查找和模拟操作,有几个库是绕不开的。

最经典、功能最全的是 pywin32 (也叫 win32com)。它直接调用Windows API,能实现几乎所有桌面自动化操作。查找窗口可以用 FindWindowEnumWindows,模拟点击和按键用 SendMessagekeybd_event。功能强大但API偏底层,需要一些Windows编程知识。

import win32gui
import win32con
import win32api

# 1. 查找窗口
def find_window(title):
    hwnd = win32gui.FindWindow(None, title)
    if hwnd:
        print(f"找到窗口句柄: {hwnd}")
        return hwnd
    else:
        print("未找到窗口")
        return None

# 2. 模拟点击 (需要先获取窗口内控件坐标)
def click_at(hwnd, x, y):
    # 将屏幕坐标转换为窗口客户区坐标
    lParam = win32api.MAKELONG(x, y)
    win32gui.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam)
    win32gui.SendMessage(hwnd, win32con.WM_LBUTTONUP, None, lParam)

# 3. 模拟按键
def press_key(hwnd, virtual_key):
    win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, virtual_key, 0)
    win32gui.SendMessage(hwnd, win32con.WM_KEYUP, virtual_key, 0)

# 使用示例
if __name__ == "__main__":
    # 查找记事本窗口
    hwnd = find_window("无标题 - 记事本")
    if hwnd:
        # 激活窗口
        win32gui.SetForegroundWindow(hwnd)
        # 模拟输入字母'A' (VK代码为0x41)
        press_key(hwnd, 0x41)

如果你觉得 pywin32 太底层,pyautogui 是个更友好的选择。它基于图像识别和屏幕坐标,不依赖窗口句柄,写起来简单直观。

import pyautogui
import time

# 查找并点击屏幕上第一个匹配的图片
button_location = pyautogui.locateOnScreen('button.png')
if button_location:
    pyautogui.click(button_location)

# 直接模拟键盘输入
pyautogui.write('Hello, World!')
pyautogui.press('enter')

对于更复杂的UI自动化,特别是需要识别控件树的场景,可以看看 uiautomation。它封装了微软的UI Automation框架,能获取丰富的控件属性。

import uiautomation as auto

# 查找记事本窗口
notepad = auto.WindowControl(searchDepth=1, ClassName='Notepad')
if notepad.Exists():
    # 获取编辑框并输入文本
    edit = notepad.EditControl()
    edit.SendKeys('Hello from uiautomation')

总结一下: 要精细控制用 pywin32,图省事用 pyautogui,做专业UI测试看 uiautomation

回到顶部