做电商运营,除了网页和手机,还有很多操作是在Windows桌面上完成的——ERP系统下单、微信回复客户、钉钉审批、企业微信发送报表、用老旧的进销存软件导出数据……
网页自动化有XPath、有元素库,手机自动化有ADB、有UI树。Windows桌面自动化呢?靠的是窗口管理、图像识别、键盘模拟。
我也是非技术出身,刚开始做桌面自动化的时候完全不知道怎么下手——没有元素可以捕获,没有XPath可以写,只能对着屏幕截图,让机器人“看图操作”。说实话,比网页自动化难上手,但学会了之后能解决的问题也多得多。今天就把Windows桌面自动化的完整方案讲一遍。
桌面自动化 vs 网页自动化:本质区别
网页自动化操作的是浏览器的DOM树,有结构化的元素可以定位。桌面自动化操作的是Windows窗口的像素,没有DOM,没有XPath。
| 对比项 | 网页自动化 | Windows桌面自动化 |
|---|---|---|
| 定位依据 | XPath、CSS选择器、元素属性 | 窗口句柄、图像识别、坐标 |
| 稳定性 | 相对稳定(页面结构变化时需调整) | 较差(分辨率、缩放、主题都会影响) |
| 核心指令 | 捕获元素、获取相似元素列表 | 获取窗口对象、点击图像、OCR识别 |
| 适用场景 | Web应用 | 桌面软件、老旧系统、ERP |
一句话总结:网页自动化靠“找元素”,桌面自动化靠“看图”和“找窗口”。
窗口管理:桌面自动化的第一步
所有桌面操作都依赖一个前提——知道操作哪个窗口。影刀RPA通过“窗口对象”来标识一个窗口。
获取窗口对象的三种方式
在右侧指令面板搜索“获取窗口对象”,有以下几种获取方式:
方式一:按窗口标题捕获
最常用。打开目标软件(比如微信、钉钉、记事本),点击“捕获窗口”按钮,鼠标移到窗口上出现橙色边框后点击确认。影刀会记录窗口的标题和类名。
# 捕获窗口:微信(窗口标题为“微信”)

获取窗口对象:
匹配方式 = “标题”
窗口标题 = “微信”
返回结果 → $微信窗口
方式二:按窗口类名捕获
有些窗口标题会变化(比如“商品管理 - 12345”里面的数字每次不同),用类名更稳定。类名可以通过Windows自带的“** Spy++**”工具查看。
方式三:获取当前激活窗口
如果窗口已经在前台,直接用“获取当前激活窗口”指令,不需要捕获。
# 获取当前激活的窗口(用户正在操作的窗口)
获取当前激活窗口 → $当前窗口
一个容易被忽略的点:窗口对象获取后,如果窗口被关闭或最小化,对象就失效了。所以每次操作前最好重新获取一次窗口对象,尤其是流程较长的时候。
激活窗口:把目标窗口拉到前台
获取窗口对象后,用“激活窗口”指令把它切换到前台。如果不激活,后面的点击、输入可能会操作到错误的窗口。
# 把微信窗口切到前台
激活窗口:$微信窗口
窗口大小和位置调整
如果图像识别需要在固定区域找图,建议先统一窗口大小和位置。
# 设置窗口位置和大小
设置窗口位置:$微信窗口,X=0,Y=0
设置窗口大小:$微信窗口,宽度=1200,高度=800
为什么这个很重要:同样的图像,在1200×800的窗口里和在最大化窗口里,位置完全不同。固定窗口尺寸能大幅提升图像识别的稳定性。
图像识别:桌面自动化的核心武器
当元素无法捕获时,图像识别是最后的保障。原理很简单:你提前截一张图作为“模板”,运行时机器人在屏幕上找跟这张图一样的地方,找到了就点那里。
点击图像指令
在右侧指令面板搜索“点击图像”或“点击图像(win) ”,拖入流程。
操作步骤:
- 点击“捕获图像”按钮
- 在目标软件界面上框选你要点击的区域(比如微信的“发送”按钮)
- 保存为图像模板
- 运行时机器人在屏幕上找这个图像,找到了就点击
# 点击微信的“发送”按钮
点击图像:
图像模板 = “微信_发送按钮.png”
匹配精度 = 0.8 # 0.8=80%相似度就算匹配
点击位置 = “中心点”

匹配精度这个参数很关键:设太高(比如0.95)可能找不到(因为屏幕缩放、颜色细微差异),设太低(比如0.6)可能点错地方。我一般设0.8,大部分场景够用。
等待图像出现
在点击之前,最好先用“等待图像”指令确保目标出现了。尤其是有弹窗、加载动画的场景。
# 等待“发送成功”提示出现
等待图像:
图像模板 = “发送成功提示.png”
超时时间 = 10秒
匹配精度 = 0.8
# 超时没出现就报错
在指定区域内找图
如果屏幕上有很多相似图片(比如Excel表格里多个相同的图标),需要在指定区域内找图,而不是全屏搜索。
操作步骤:
- 先用“获取窗口对象”锁定目标窗口
- 在“点击图像”指令的高级设置中,勾选“查找范围”,选择“指定窗口”或“指定区域”
- 框定搜索范围,减少误匹配
跨设备图像识别失效的解决方案
这是桌面自动化最大的坑——在自己电脑上跑得好好的流程,换一台电脑就找不到图了。
根本原因:不是“屏幕大小”本身的问题,而是分辨率差异 + 系统缩放比例的组合效应。比如你在1920×1080、缩放100%的电脑上截的图,拿到2560×1440、缩放150%的电脑上,图像大小和位置都变了。
解决方案:双维度校准。
核心逻辑是计算两个比例:
- 分辨率比例:当前设备真实分辨率 ÷ 开发设备真实分辨率
- 缩放比例:当前设备真实分辨率 ÷ 当前设备缩放后分辨率
然后用最终适配比例 = 分辨率比例 × 缩放比例来调整图像和坐标。
实操方法:在流程里加一段Python脚本,自动获取当前设备的分辨率和缩放比例,动态调整图像模板的匹配参数。
# 获取当前设备的真实分辨率和缩放后分辨率
import win32api, win32con, win32gui, win32print
import tkinter as tk
# 真实分辨率(不受缩放影响)
hdc = win32gui.GetDC(0)
real_w = win32print.GetDeviceCaps(hdc, win32con.DESKTOPHORZRES)
real_h = win32print.GetDeviceCaps(hdc, win32con.DESKTOPVERTRES)
# 缩放后分辨率(系统显示的逻辑像素)
root = tk.Tk()
scaled_w = root.winfo_screenwidth()
scaled_h = root.winfo_screenheight()
有了这两个数据,就能计算出适配比例,动态调整图像匹配的坐标。
OCR文字识别:把图片里的文字读出来
有些场景下,图像识别不够用——你要的是文字内容,而不是点击某个位置。比如识别验证码、提取截图里的订单号、读取老系统里的数据报表。
影刀的OCR(光学字符识别)有几种实现方式:
方式一:内置OCR(免费,准确率一般)
在右侧指令面板搜索“OCR文字识别”,拖入流程。
OCR文字识别:
识别引擎 = “内置OCR”
识别语言 = “中英混合”
图片来源 = “截图变量” # 先截图再识别
返回结果 → $识别文字
内置OCR免费,但对中文识别准确率大概80%-90%,字体小或背景复杂时准确率会下降。
方式二:第三方OCR(付费,准确率高)
配置百度OCR或腾讯OCR的API Key,识别准确率可以达到95%以上。
OCR文字识别:
识别引擎 = “百度OCR”
API Key = “你的API Key”
Secret Key = “你的Secret Key”
识别语言 = “中英混合”
图片来源 = “截图变量”
返回结果 → $识别文字
百度/腾讯OCR每天有免费额度,低频使用基本不用花钱。
方式三:魔法指令生成OCR代码(免费,灵活)
影刀的“魔法指令”可以自动生成OCR识别代码。你只需要输入“帮我把图片里的字都读出来”,它就能生成一段可运行的Python代码。
优点是免费、数据本地处理、不需要懂代码。对于日常办公中90%的图片文字提取需求,这个方法都能快速搞定。
方式四:鼠标悬停在文本上(OCR)
影刀有一个专门的指令叫“鼠标悬停在文本上(OCR)”——通过AI引擎识别屏幕上指定文本的位置,自动把鼠标移到文字中心点。
这个指令特别适合桌面软件里文本可见但元素不可捕获的场景。比如在某个老旧ERP系统里,你想把鼠标移到“确认”按钮的文字上,但捕获不到按钮元素——用这个指令就能搞定。
OCR文字定位+偏移点击(进阶)
这是桌面自动化里最实用也最容易被忽略的技巧。
核心逻辑:通过OCR识别界面上的文字,获取文字的坐标,然后根据文字与实际点击点的相对偏移量执行点击。
适用场景:目标元素有明确文字标识(如“确认”“删除”按钮),但元素本身不可捕获。
实现步骤:
- 截取当前界面截图
- 用OCR识别文字及其坐标
- 筛选目标文字(比如“确认”)
- 计算偏移量(文字矩形中心向下偏移10px通常就是按钮中心)
- 执行点击
这个方法我在处理各种老旧ERP系统时屡试不爽——那些用VB6写的、连元素都捕获不到的软件,全靠OCR文字定位来操作。
模拟键盘与鼠标:最后的操作手段
当图像识别和OCR都搞不定的时候,还有最后一招——直接模拟键盘和鼠标。
模拟键盘输入
在右侧指令面板搜索“键盘输入”或“发送按键”。
# 模拟键盘输入文本
键盘输入:内容 = “Hello World”
# 模拟快捷键(Ctrl+C复制)
键盘输入:内容 = “^c” # ^表示Ctrl
# 模拟功能键
键盘输入:内容 = “{ENTER}” # 回车
键盘输入:内容 = “{TAB}” # Tab键
常用快捷键符号:
^= Ctrl+= Shift%= Alt{ENTER}= 回车{TAB}= Tab{DELETE}= Delete{F1}-{F12}= 功能键
模拟鼠标操作
# 移动鼠标到指定坐标
移动鼠标:X=500,Y=300
# 左键点击
鼠标点击:按键=左键
# 右键点击
鼠标点击:按键=右键
# 滚轮滚动
鼠标滚轮:滚动行数=3
剪切板操作
桌面自动化里,剪切板比键盘输入更可靠——尤其输入中文长文本的时候。
# 复制选中内容到剪切板(Ctrl+C)
键盘输入:内容 = “^c”
# 获取剪切板内容
获取剪切板文本 → $剪切板内容
# 设置剪切板内容
设置剪切板文本:内容 = “要粘贴的文字”
# 粘贴(Ctrl+V)
键盘输入:内容 = “^v”
文本输入的一个坑:用“键盘输入”直接输入中文时,如果当前输入法不是中文,可能会输入英文或乱码。推荐做法:先用“设置剪切板文本”把内容放到剪切板,再用Ctrl+V粘贴。
实战案例:微信自动发送消息
把以上所有技术串起来,做一个完整的实战案例——自动打开微信,给指定好友发送消息。
# 1. 获取微信窗口对象
获取窗口对象:标题=“微信” → $微信窗口
# 2. 激活微信窗口(确保在前台)
激活窗口:$微信窗口
# 3. 点击“搜索”图标(图像识别)
点击图像:模板=“微信_搜索图标.png”,匹配精度=0.8
# 4. 等待搜索框出现
等待图像:模板=“微信_搜索框.png”,超时=5秒
# 5. 输入好友昵称(剪切板方式)
设置剪切板文本:内容=“张三”
键盘输入:内容=“^v” # Ctrl+V粘贴
等待:1秒
# 6. 点击搜索到的好友(图像识别)
点击图像:模板=“微信_张三头像.png”,匹配精度=0.8
# 7. 等待聊天窗口打开
等待图像:模板=“微信_输入框.png”,超时=5秒
# 8. 输入消息内容(剪切板方式)
设置剪切板文本:内容=“你好,这是自动发送的消息”
键盘输入:内容=“^v”
# 9. 点击“发送”按钮(图像识别)
点击图像:模板=“微信_发送按钮.png”,匹配精度=0.8
# 10. 等待发送成功
等待图像:模板=“微信_发送成功.png”,超时=3秒
注意:微信等社交软件对自动化操作有风控机制。批量发送时建议加随机延时(1-3秒),避免触发限制。
辅助按键技巧:解决“一点图像就消失”的问题
这是桌面自动化里很隐蔽但很常见的一个坑。
现象:在钉钉、企业微信、飞书等软件里,搜索框输入内容后,想点击搜索结果,一点击搜索结果搜索框就消失了,流程失败。
原因:搜索框处于激活状态时,点击其他非输入区域,系统判定为“失去焦点”,自动清空搜索状态。
解决方法:在“点击图像”或“点击元素(win)”指令的高级设置中,把“辅助按键”设置为Alt。这样点击时不会导致搜索框失去焦点。
这个方法适用于钉钉PC端、企业微信、飞书、Foxmail等PC端软件。
六个常见问题速查
| 问题现象 | 根本原因 | 修复方法 |
|---|---|---|
| 图像识别找不到图 | 分辨率/缩放比例不同 | 用双维度校准算法适配 |
| 窗口操作失效 | 窗口句柄过期 | 操作前重新获取窗口对象 |
| 点击图像导致搜索框消失 | 焦点丢失 | 辅助按键设为Alt |
| OCR识别中文不准 | 内置OCR对中文支持弱 | 改用百度/腾讯OCR或魔法指令 |
| 换电脑后所有图像都失效 | 分辨率+缩放差异 | 在目标设备上重新截图 |
| 键盘输入中文变乱码 | 输入法不对 | 用剪切板方式(Ctrl+V)代替键盘输入 |
推荐资源
- 影刀官方帮助文档搜索“窗口对象”或“图像识别”
- 影刀社区搜索“桌面自动化”或“图像识别”,有大量踩坑分享
- Chrome插件Spy++(Windows自带工具),用于查看窗口类名
- 影刀B站官方账号搜索“桌面自动化”,有视频教程
#影刀RPA #RPA自动化 #桌面自动化 #图像识别 #OCR #Windows自动化
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。如果这篇文章对你有帮助,欢迎点赞收藏,下一篇我们聊“流程模板化与快速复用的完整方案”。
