几句代码实现调用「外部游戏」的函数

aardio 中有个 Remote Call 功能,一句代码就可以导入外部游戏进程的函数。下面我们看一个用 aardio 自动玩扫雷游戏的例子,该代码是论坛用户 dtcser 10 年前写的:

关键代码只有几句:

//导入外部游戏的函数( 远程call )var act = prcs.remoteApi('void()', 0x010037E1);
//写结构体到游戏内存,这里是点击的坐标prcs.write(addrPoint,{ INT x = x; INT y = y;})
//执行外部进程函数act();

可以在 aardio 范例找到完整的源代码,这个代码演示了自外部进程内存读数据,以及远程Call 自动玩游戏、利用鼠标模拟玩游戏两种方法:

下面附上完整代码,

import winex;import mouse;import process;//启动扫雷游戏import process.winmine;var prcs = process.winmine();//自进程内存读取结构体,写内存用 prcs.write 函数。var setting = prcs.readStruct(0x01005330,{    INT count; //雷点个数    INT width;//棋盘宽    INT height;//棋盘高})if(false){      //方法一:鼠标模式    hwnd = winex.waitVisible('扫雷');//获取窗口句柄    win.showForeground(hwnd);//激活窗口    sweep = function(x,y){        x,y = win.toScreen(hwnd,1+16*x,50+16*y); //转换为屏幕坐标        mouse.click(x,y,true); //在指定坐标模拟鼠标单击    }}else{      //方法二:远程Call( 直接调用 EXE 里的函数 )    var addrCall = 0x010037E1 //call地址    var addrPoint = 0x01005118 //call参数:addrCallPoint:x   addrCallPoint+4:y       //获取远程call    var act = prcs.remoteApi('void()', addrCall);       sweep = function(x,y){        //写入结构体到外部进程        prcs.write(addrPoint,{          INT x = x;          INT y = y;        })                 act(); //远程Call 点击函数        thread.delay(10); //加点延时    }}var addrDatabase = 0x1005340 //棋盘基址for(y=1;setting.height){    for(x=1;setting.width){        //未点击时:无雷:0f;;;有雷,8f (有用),点击后:无雷:4x,x=周围雷的个数;;;有雷8x        n = prcs.readNumber(addrDatabase+x+32*y,'byte') //棋盘基址+x+y*32=棋盘点的值        if(n==0x0f) sweep(x,y);    }}//释放进程对象prcs.free();
(0)

相关推荐