aardio 文档

aardio 范例:找图代码生成器

//找图代码生成器
import win.ui;
/*DSG{{*/
var winform = win.form(text="找图代码生成器";right=454;bottom=403)
winform.add(
btnSnap={cls="button";text="选择要查找的目标图像";left=146;top=324;right=450;bottom=400;color=14120960;db=1;dl=1;dr=1;font=LOGFONT(h=-14);note="在屏幕上框选要查找的目标图像,
目标图像越小,特征越明显,找图效果越好";z=3};
btnTest={cls="button";text="运行测试";left=325;top=7;right=418;bottom=34;dr=1;dt=1;z=5};
editCode={cls="edit";left=5;top=40;right=443;bottom=319;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=2};
plusImage={cls="plus";left=7;top=337;right=106;bottom=385;db=1;dl=1;repeat="scale";z=1};
static3={cls="static";text="自动找图代码:";left=8;top=14;right=244;bottom=37;dl=1;dt=1;transparent=1;z=4}
)
/*}}*/

import mouse;
import soImage; 
import winex;
winform.btnSnap.oncommand = function(id,event){

    import gdip.snap;
    import mouse.screenArea;
    var screenArea = mouse.screenArea();
    screenArea.onSelectionChanged = function(rc){
        //尽量截取特征明显的图
        var bmp = gdip.snap(screenArea.hwnd,rc);
        var buf = bmp.saveToBuffer("*.jpg",80);
        winform.plusImage.background = buf;
        var strJpg = ..string.escape(buf);

        owner.close();  

        var x,y = mouse.getPos();  
        winex.waitClose(screenArea.hwnd); 

        var hwndTarget = winex.fromPointReal( x,y,0x0004/*_CWP_SKIPTRANSPARENT*/ | 0x0001/*_CWP_SKIPINVISIBLE*/  );
        var hwndRoot = win.getRoot(hwndTarget);
        var pClass,pText = winform.validPattern(win.getClass(hwndTarget)) ,winform.validPattern(winex.getText(hwndTarget,50));

        var hwndPattern = string.format('var hwndParent = winex.find("%s","%s");',pClass,pText);
        if( hwndRoot != hwndTarget ){ 
            var pClass2,pText2 = winform.validPattern(win.getClass(hwndRoot)) ,winform.validPattern(winex.getText(hwndRoot,50));
            hwndPattern = string.format('var hwndParent = winex.find("%s","%s");\r\nvar hwnd = winex.findEx(hwndParent,,"%s","%s");',pClass2,pText2,pClass,pText); 
        }

        import string.template;
        var strCode = string.template();
        strCode.template = /***
//创建要查找的目标图像
import soImage;
var imgFind = soImage();
imgFind.setBytes('${jpg}');

//查找窗口
import winex;
${hwnd}

//窗口截图
var imgWindow = soImage();
imgWindow.captureWindow(hwnd);

//查找目标图像
var sm,x,y = imgFind.findImage( imgWindow );

//移动鼠标
import mouse; 
mouse.moveToWindow(0,0,hwnd);
mouse.moveToWindow(x,y,hwnd,8);
        ***/

        winform.editCode.text =  strCode.format(
            hwnd = hwndPattern;
            jpg = strJpg; 
        ); 
    }
    screenArea.doModal(); 
}

winform.btnTest.oncommand = function(id,event){
    code = string.trim( winform.editCode.text );
    if(!#code){
        winform.msgboxErr("请先选择目标图像");
        return;
    }

    loadcodex(code);
}

winform.validPattern = function(str){
    if(!#str) return "";

    var mbs = string.match(str,"[\s\w]*:+[\s\w]*")
    if(#mbs)
        return mbs;

    str = string.replace(str,"(\p)","\\\1")     
    str = string.replace(str,"\x+",function(str){
        if(..string.find(str,"\d") ) return "\x+"
        return str;
    } )     

    str = string.replace(str,"\d+","\\d+")  
    return str;
}


winform.show();
win.loopMessage();

Markdown 格式