
Python 实现微软 UI 自动化(数字覆盖交互)
微软数字覆盖(Numeric Overlay) ,是 Windows 系统自带的快速访问键 / 数字标记 功能(按 Alt 键触发,给可点击 UI 元素显示数字 / 字母,直接按对应键操作),本质是Windows UI 自动化(Microsoft UI Automation)能力。
开箱即用的 Python 工具,实现:
- 触发 Windows 数字覆盖标记
- 定位、点击、输入 UI 元素
- 模拟数字覆盖按键操作
- 支持所有 Windows 桌面应用(记事本、浏览器、Office、系统窗口等)
一、依赖安装
bash
# 核心:微软 UI 自动化库
pip install pywinauto
# 可选:键盘模拟增强
pip install pynput
二、完整工具代码(直接运行)
python
# -*- coding: utf-8 -*-
"""
Windows 数字覆盖 UI 自动化工具
功能:触发数字覆盖、定位元素、模拟点击/按键、自动化操作
"""
import time
import pywinauto
from pywinauto import Application, Desktop
from pywinauto.keyboard import send_keys
from pywinauto.findwindows import ElementNotFoundError
class WindowsOverlayAutomator:
def __init__(self):
"""初始化自动化工具"""
self.app = None
self.window = None
print("✅ Windows 数字覆盖 UI 自动化工具已启动")
print("ℹ️ 快捷键:Alt 键 = 触发系统数字覆盖标记")
def connect_window(self, title_regex: str):
"""
连接目标窗口(支持模糊匹配标题)
:param title_regex: 窗口标题关键词(如:记事本、Edge、设置)
"""
try:
# 连接桌面已打开的窗口
self.window = Desktop(backend="uia").window(title_regex=title_regex)
self.window.wait('visible', timeout=5)
self.window.set_focus() # 激活窗口
print(f"✅ 已连接窗口:{self.window.window_text()}")
return True
except ElementNotFoundError:
print(f"❌ 未找到窗口:{title_regex}")
return False
def trigger_overlay(self):
"""触发 Windows 数字覆盖标记(按 Alt 键)"""
send_keys("{ALT}")
print("🔢 已触发系统数字覆盖标记")
time.sleep(0.2)
def click_by_overlay_key(self, key: str):
"""
模拟数字覆盖按键点击(核心功能!)
:param key: 数字覆盖显示的按键(如 "1", "2", "A", "B")
"""
send_keys(key)
print(f"🖱️ 已模拟点击覆盖按键:{key}")
time.sleep(0.3)
def click_by_text(self, text: str):
"""通过文本定位 UI 元素并点击(无需手动看数字)"""
try:
elem = self.window.child_window(title=text, control_type="Button")
elem.click()
print(f"🖱️ 已点击文本元素:{text}")
except ElementNotFoundError:
print(f"❌ 未找到文本元素:{text}")
def input_text(self, text: str):
"""向激活的输入框输入文本"""
send_keys(text, with_spaces=True)
print(f"⌨️ 已输入文本:{text}")
time.sleep(0.2)
def list_all_controls(self):
"""打印窗口内所有可交互 UI 元素(调试用)"""
print("\n📋 窗口内可交互元素:")
self.window.print_control_identifiers()
# ====================== 示例:快速使用 ======================
if __name__ == "__main__":
# 1. 创建自动化工具实例
auto = WindowsOverlayAutomator()
# 2. 连接目标窗口(修改为你要操作的窗口标题)
auto.connect_window("记事本") # 示例:记事本
# auto.connect_window("设置") # 示例:Windows 设置
# auto.connect_window("Edge") # 示例:Edge浏览器
# 3. 触发数字覆盖标记
auto.trigger_overlay()
# 4. 模拟数字覆盖按键(手动看屏幕上的数字,替换成对应按键)
# auto.click_by_overlay_key("1")
# auto.click_by_overlay_key("2")
# 5. 直接输入文本
# auto.input_text("Hello Windows 数字覆盖!")
# 可选:打印所有元素(调试用)
# auto.list_all_controls()
print("\n🎉 操作完成!")
三、核心功能说明(你最关心的)
1. 触发数字覆盖
python
auto.trigger_overlay() # 等价手动按 Alt 键,显示数字标记
2. 模拟数字覆盖点击(核心!)
- 运行代码触发覆盖后,看屏幕上的数字 / 字母
- 直接传入对应字符即可点击:
python
auto.click_by_overlay_key("5") # 点击覆盖标记 5
auto.click_by_overlay_key("A") # 点击覆盖标记 A
3. 免手动看数字:直接按文本点击
python
auto.click_by_text("保存")
auto.click_by_text("确定")
auto.click_by_text("关闭")
四、快速上手步骤
- 打开你要操作的软件(如记事本、设置、Office、微信)
- 修改代码中
connect_window的窗口名称 - 运行代码 → 自动触发数字覆盖
- 看屏幕上的数字 → 调用
click_by_overlay_key完成操作
五、进阶实用场景
场景 1:自动化打开 Windows 设置
python
auto.connect_window("设置")
auto.trigger_overlay()
auto.click_by_overlay_key("6") # 假设网络是 6
auto.click_by_overlay_key("2") # 假设 WIFI 是 2
场景 2:自动化记事本输入 + 保存
python
auto.connect_window("记事本")
auto.input_text("这是自动化输入的内容")
send_keys("{VK_MENU down}f{VK_MENU up}") # Alt+F 打开菜单
auto.click_by_overlay_key("1") # 保存
六、关键优势
- 完全基于微软官方 UI 自动化,稳定不封号
- 支持所有 Windows 桌面应用
- 模拟人类操作,和手动按数字覆盖完全一致
- 代码轻量,无需安装额外系统组件
总结
- 这个工具直接实现了微软数字覆盖交互 ,核心是
trigger_overlay+click_by_overlay_key - 依赖只有
pywinauto,安装简单、运行稳定 - 可直接改造成自动化脚本、批量工具、GUI 小软件