Python中如何查找窗口并模拟点击与按键操作?请推荐几个好用的库
请推荐几个好用的 python 库,用来查找窗口,前台或者后台点击窗口或者子窗口,模拟按键等操作窗口的
多谢!
Python中如何查找窗口并模拟点击与按键操作?请推荐几个好用的库
4 回复
这个问题在自动化测试和脚本工具开发里很常见。要搞定Windows窗口的查找和模拟操作,有几个库是绕不开的。
最经典、功能最全的是 pywin32 (也叫 win32com)。它直接调用Windows API,能实现几乎所有桌面自动化操作。查找窗口可以用 FindWindow 或 EnumWindows,模拟点击和按键用 SendMessage 或 keybd_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。


