# aardio 范例: string.ocrLite 屏幕找字



```aardio
//屏幕找字完整版
import win.ui;
/*DSG{{*/
var winform = win.form(text="string.ocrLite 屏幕找字";right=796;bottom=504)
winform.add(
button={cls="button";text="识别剪贴板图像";left=528;top=423;right=712;bottom=477;db=1;dr=1;z=2};
edit={cls="edit";left=497;top=36;right=764;bottom=403;db=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=3};
plus={cls="plus";left=25;top=36;right=474;bottom=403;db=1;dl=1;dr=1;dt=1;repeat="scale";z=1}
)
/*}}*/

/*
屏幕找字简版 https://www.aardio.com/zh-cn/docs/examples/Automation/ComputerVision/ocrUwp.html
简单 OCR: https://www.aardio.com/zh-cn/docs/examples/Automation/ComputerVision/soImage.ocr.example.html
.NET OCR 范例: https://www.aardio.com/zh-cn/docs/examples/Languages/dotNet/Apps/OCR.html
*/

import string.ocrLite;//必须在主线程中导入 string.ocrLite（无论主线程是否使用）以避免 OCR 组件在进程退出前释放
import string.ocrLite.defaultModels;//必须导入模型
import win.clip;

//string.ocrLite 主要用于识别中文，识别数字改用 dotNet.ocr 或 tesseract 
var ocr = string.ocrLite(,true);
winform.button.oncommand = function(id,event){
	var hBmp = win.clip.readBitmap()
	if(!hBmp){
		winform.edit.print("剪贴板未读取到图像")
		return;
	}
	
	var bmp = gdip.bitmap(hBmp);
	var ocrRet = ocr.detectBitmap(bmp);
	if(ocrRet){
		winform.plus.background = ocrRet.resultBitmap;
		
		winform.edit.text = ocrRet.text;
		winform.edit.text = "";
		
		import JSON;
		for i,block in table.eachIndex(ocrRet.blocks){
			winform.edit.print(block.text);
			winform.edit.print(JSON.stringify(block.points,false));
		}
	}
}

winform.show();

//请使用 string.ocrLite扩展库 以及 aardio 最新版
var ocrResult = ocr.detectClient(winform.hwnd);
if(ocrResult){  
    
    //在图文识别结果里模糊搜索最接近的文本所在的区块正中点位置的坐标。
	var x,y = ocrResult.findPoint("识别剪贴板图像",0.1);
	if(x && y){  
		import mouse; 
		//无句柄窗口可以直接用 winex.mouse.click() 点击
		mouse.moveToWindow(x,y,winform.hwnd);
		mouse.click();
	}
	
	//也可以更简单一些下面这样写
	ocrResult.click("识别剪贴板图像",0.1);
}

win.loopMessage();
```

