如何把屏幕上的文字读进宏
在 Windows 宏中做屏幕 OCR:从任何窗口读取一个数字、一个状态或一个名称,然后决定怎么处理它。
更新于 2026 年 9 月 18 日 · 在 Myna Recorder 中,读取屏幕文字属于 Pro 套餐;每个新账户都可以免费试用 7 天。
1. read_text 做什么
大多数宏工具能点击、能打字,却看不懂屏幕上写的是什么。read_text 把屏幕上一个矩形区域里的文字读进变量,之后这个值可以输入到别处、用于比较,或者放进一条消息里:
total = read_text(region=(820, 400, 180, 40), single_line=True)
message_box("The order total was ${total}")
2. 选择区域
一定要传入 region=(x, y, width, height)。读取整个桌面时,图像会被缩小,直到普通的界面文字无法辨认。区域和你关心的字段一样大,读取就又快又准。single_line=True 会把读回来的内容合并成一行,读数字或名称时正需要这样。区域中的每个数字都可以是一个变量或一个算式,所以区域可以跟着 wait_for 找到的匹配位置走。
3. 三种读取器
| engine= | 说明 | 消耗积分 | 可随导出的程序带走 |
|---|---|---|---|
| "builtin" | 默认读取器。在你的电脑上运行。 | 否 | 是 |
| "tesseract" | 第二个本地读取器。有些屏幕它读得比内置读取器好,有些则更差;可以用 page_mode= 控制如何把图像拆分成行。读取结果接近但不对时,可以试试它。 | 否 | 是 |
| "ai" | 我们服务器上的转写模型,用于两个本地读取器都读错的文字。 | 是 | 否 |
读取引擎按步骤选择,所以同一个宏可以处处使用免费读取器,只在最关键的那个字段上使用 AI 读取器。
4. 清理并使用结果
total = read_text(region=(820, 400, 180, 40)).to_number()
if total < 1000:
notify("Total looks low: ${total}")
方法可以清理读回来的内容;最常用的是 .to_number()。空白区域会存入一个空字符串,运行照常继续,所以你写的条件要同时用空白和有值两种情况来测试。“变量”面板会在运行时实时显示每个变量,这是查看读取器实际返回了什么的最快方法。
5. 什么时候改为询问 AI
read_text 只做转写。要对屏幕做判断,请使用 ask_ai:“有多少行是红色的?”“有没有错误对话框?”它有三种角色:"count" 返回一个数字以及每个对象的位置,宏可以据此点击;"explain" 返回一句话,用于日志或通知;"read" 用你选择的模型进行转写。出于同样的原因,也要给它一个小区域:模型能在整个桌面上数出东西,却未必能定位它们。每次调用都消耗积分,每次运行最多调用 AI 60 次。详情见手册。
6. 在宏运行时监视文字
一个步骤只在你放置它的位置读取一次。设为“询问 AI”的监视行会在整个运行过程中查看,或者在“开始监视”之后独立工作,并在答案出现或消失时触发。它可以弹窗、发送带屏幕截图的 Telegram 或 Discord 消息,或者停止宏。这样,凌晨 3 点出现“会话已过期”横幅时你就会收到通知,而不必在每个循环里都为它加一个步骤。