简单编程:屏幕找图找色找字,自动化操作

▶ 屏幕找字:使用系统自带组件

其实 Windows 10/11 系统自带的一个强大、免费的屏幕图像文字识别组件,调用该组件生成的 EXE 文件体积很小。

下面我们用 aardio 编程语言写个例子,代码很简单,先上图看效果:

在这里插入图片描述

请复制下面的源代码粘贴到 aardio 中,再按「运行」按钮就可以看到上图的效果 —— 程序自动找到了屏幕上的文本,鼠标自动移到了该位置。

import mouse;
import dotNet.ocr;

//创建 OCR 对象
var ocr = dotNet.ocr();

//识别屏幕上的文字
var ocrResult = ocr.detectScreen()

//查找文字在屏幕上的位置
var x,y = ocrResult.findPoint(
  "把鼠标移动到这里",0.1
);

mouse.moveTo(x,y,true)

上面就是一个完整的程序了,aardio 写程序就这么简单。

这个系统 OCR 组件其实是一个 UWP 组件,不过 aardio 调用 .NET 组件、或者调用 UWP 组件都非常方便。参考「 aardio 范例 > 调用其他语言 > dotNet > 调用 UWP 接口 」:

在这里插入图片描述

▶ 屏幕找字:调用开源、免费、强大、绿色的 chineseocrlite

aardio 基于 chineseocrlite 封装了 string.ocrLite 扩展库,支持生成绿色、独立的 EXE 文件,带模型生成的EXE打包后仅 十几 MB。

调用源代码很简单,先上图看效果:

在这里插入图片描述
请复制下面的源代码,粘贴到 aardio 中,再按「运行」按钮就可以看到上图的效果 ——鼠标自动移到了屏幕上指定文本所在位置。

import mouse;
import string.ocrLite;
import string.ocrLite.defaultModels;

//创建 OCR 对象
var ocr = string.ocrLite();

//识别屏幕上的文字
var ocrResult = ocr.detectScreen();

//查找文字在屏幕上的位置
var x,y = ocrResult.findPoint(
  "把鼠标移动到这里",0.2
);

mouse.moveTo(x,y,true);

大家可能注意到了,aardio 中很多库的接口、用法都一样,可以一通百通。

如果是制作自动化机器人之类的软件,识别屏幕上文字的能力就好像机器人的眼睛一样重要。尤其是现在很多无窗口界面的软件,通过 OCR 组件就可以较好地定位到界面上指定的部位进行准确的操作。大家可以试试 OCR 结合 aardio 标准库里的 winex.mouse, mouse 等可以实现非常酷的效果,另外 aardio 工具里的「探测器->窗口探测器」也很重要(可以生成示例代码)。

在这里插入图片描述

▶ 屏幕找色

找色很简单,请复制下面的范例代码粘贴到 aardio 中,然后点「运行」就可以看到效果:

import gdi;
import win;
import mouse;
import soImage;

//抓屏
var imgScreen = soImage();
imgScreen.capture(); 

//在图像上搜索指定颜色的点,
//第一个参数是一个表示查找颜色的数值,更多参数用法请查看智能提示
var x,y = imgScreen.findColor( gdi.RGB(48,171,53) );

//返回该坐标所在显示器左上角位置
var scrX,scrY = win.getScreenPos(x=x,y=y); 

//快速移动鼠标(相对移动)
mouse.move(scrX,scrY,true);

//获取虚拟屏幕位置,双屏幕时可能起始坐标可能返回负数
var scrX,scrY = win.getScreenPos(); 

//慢速移动鼠标,显示移动轨迹
mouse.moveTo(x+scrX,y+scrY,true);

注意 mouse.moveTo() 函数移动鼠标时可以看到移动轨迹,改为 mouse.move() 函数可以直接移动到指定坐标。

▶ 屏幕找图

aardio 里屏幕找图就更简单了,首先加载要查找的图像:

import soImage;
var img = soImage();

img.load("/res/find.jpg");

“/res/find.jpg” 可以是硬盘上的图像文件路径,也可以是 EXE 资源文件路径( 可以生成独立 EXE )。
在这里插入图片描述
也可以自内存直接加载图像,如下用第 2 个参数指定图像文件后缀名:

img.setBytes( imgBytes,"*.png");

查找图像要尽可能的小,并尽可能裁剪去掉背景,突出查找特征。

使用 img.findImage 全屏找图,也可以使用下面的函数在指定窗口内找图:

var sm,x,y = imgFind.findImageInWindow(hwnd);

上面的 hwnd 参数指定窗口句柄。返回值 sm 为相似度( 0 到 100 之间的值,100 为完全相似,0 为完全不相似 ),返回值 x,y 为找到图像的右下角坐标。

▶ 自动化操作

找图找色找字的目的是自动化操作,aardio 与自动化操作有关的库如下:

win //窗口操作
winex //外部程序窗口操作
winex.accObject //Microsoft Active Accessibility 自动化接口
winex.key //后台键盘操作
winex.mouse //后台鼠标操作
key //键盘操作
mouse //鼠标操作
process //进程操作
soImage //找图找色

与自动化操作有关的范例:

在这里插入图片描述
网页自动化就不必用上面这些了,直接使用浏览器控件就可以,可参考我之前写的文章 更简单地自动化操作浏览器 。「aardio 范例 > Web 界面」也可以看一下:

在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值