现在有很多强大的免费开源组件,
例如 aardio 调用 Chineseocr-lite 屏幕找字点击就只要几句代码:
import mouse;
import string.ocrLite;
import string.ocrLite.defaultModels;
var ocr = string.ocrLite();
var ocrResult = ocr.detectScreen();
var x,y = ocrResult.findPoint("要查找的按钮文本",0.1);
mouse.moveTo(x,y,true);
其实 Windows 自带一个强大的 OCR 组件,用 aardio 调用一下试试:
import mouse;
import dotNet.ocr;
var ocr = dotNet.ocr();
var ocrResult = ocr.detectScreen()
var x,y = ocrResult.findPoint("把鼠标移动到这里",0.1);
mouse.moveTo(x,y,true)
用 aardio 实现屏幕找图的例子:
import win.ui;
/*DSG{{*/
var winform = win.form(text="请稍候正在打开网页......";right=759;bottom=469)
/*}}*/
import web.form;
var wb = web.form( winform );
wb.noScriptErr = true;
wb.go("http://bbs.aardio.com/forum-image-1.html");
winform.show();
//等待指定HTML节点(匹配tagName,src等节点属性)
wb.waitQueryEles( tagName="img"; src="aardio\.png" )
win.delay(1000);//给点时间让图像显示出来
import soImage;//导入搜图扩展库
import inet.http;//导入HTTP支持库
winform.text = "请稍候,下在下载样本数据"
var imgBytes = inet.http().get("http://bbs.aardio.com/static/image/common/aardio.png");
//创建查找图像
var imgFind = soImage();
imgFind.setBytes( imgBytes,"*.png"); //解析下载的图像数据,注意要指定图像文件后缀名
imgFind.crop(29,33,193,55);//裁剪图像,尽可能去掉背景,保留特征最强的部分
var sm,x,y = imgFind.findImageInWindow(winform);
winform.text = "已找到图片,相似度:" + sm;
//移动鼠标
import mouse;
var wx,wy = win.getPos(winform.hwnd);//获取目标窗口坐标
mouse.moveTo(wx+x-50,wy+y-50,true);//保留鼠标轨迹模仿真实的鼠标移动
mouse.click();//点击鼠标
//启动消息循环
win.loopMessage();
屏幕找色:
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);