aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: www378660084

自动玩扫雷,鼠标模拟+远程call

 火.. [复制链接]

2

主题

4

回帖

52

积分

一级会员

积分
52
发表于 2014-11-5 14:13:40 | 显示全部楼层
都很强,感觉有了aardio以后什么困难都可以解决了。

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2021-11-4 16:37:50 | 显示全部楼层
改进了一下,可以在 Win10 上直接运行,
另外,其实 aardio 可以直接在外部进程内存读写结构体:

//自动扫雷
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();

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2024-9-15 10:59 , Processed in 0.063708 second(s), 20 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表