搜索
aardio官方社区 门户 查看主题

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

发布者: www378660084 | 发布时间: 2011-10-11 21:45| 查看数: 32696| 评论数: 38|帖子模式

本帖最后由 www378660084 于 2011-10-11 22:19 编辑

import process;
import winex;
import mouse;
import key;

//地址是在我的xp机器上找到的,不知道一不一样~~~~
/*
MOD:
    模式
    0:call模式
    1:鼠标模拟模式
*/

var MOD = 1
var CALLADDR = 0x010037E1   //call地址
var DATABASE = 0x1005340    //棋盘基址
var SETBASE = 0x01005330    //设置基址+0:雷点个数 +4:棋盘宽 +8:棋盘高
var XYBASE = 0x01005118     //call参数:XYBASE:x   XYBASE+4:y


var prc = process("winmine.exe") //创建扫雷进程

var act,hwnd;

if(MOD){  //鼠标模式
    hwnd = winex.waitVisible("扫雷");  //获取窗口句柄
    win.getActive(hwnd);                //激活窗口
    x,y,cx,cy=win.getPos(hwnd);         //获取窗口坐标
}else{  //call模式
    act = prc.remoteApi("void()", CALLADDR);  //获取远程call
}

var width = prc.readNumber(SETBASE+4,"INT")
var height = prc.readNumber(SETBASE+8,"INT")
for(j=1;height)
for(i=1;width)
{
    n = prc.readNumber(DATABASE+i+32*j,
"byte")  //棋盘基址+x+y*32=棋盘点的值
    /*
        n:棋盘点的值
        未点击时:无雷:0f;;;有雷,8f (有用)
        点击后:无雷:4x,x=周围雷的个数;;;有雷8x
    */

   
if(n==0x0f)  
    {
        
if(MOD){
            mouse.move(x+4+16*i,y+96+16*j,
true);  //移动到坐标点
            mouse.click();                      //点击
            //sleep(500)  
        }else{
            prc.writeNumber(XYBASE,i,
"INT")  //写X坐标
            prc.writeNumber(XYBASE+4,j,"INT")  //写Y坐标
            act();                              //点击函数
        }
    }
}
prc.free();         
//释放句柄


评分

参与人数 3专家分 +170 银币 +30 收起 理由
qqmmcc + 50 + 30
quicker + 100 不错
低调点 + 20 赞一个!

查看全部评分

最新评论

低调点 发表于 2011-10-11 22:05:44

在IDE里 右键复制到HTML 然后论坛发帖选择高级模式 这样看起来效果更好 代码有高亮 层次更清晰....

在IDE里 右键复制到HTML  然后论坛发帖选择高级模式  
这样看起来效果更好 代码有高亮  层次更清晰....
www378660084 发表于 2011-10-11 22:21:01

[quote][size=2][color=#999999]xj199241 发表于 2011-10-11 22:05[/color] [url=forum.p

xj199241 发表于 2011-10-11 22:05
在IDE里 右键复制到HTML  然后论坛发帖选择高级模式  
这样看起来效果更好 代码有高亮  层次更清晰....

改过来了,谢谢提醒
编程 发表于 2011-10-11 22:34:48

[i=s] 本帖最后由 编程 于 2011-10-16 21:40 编辑 [/i] {:soso_e179:} 楼主很强,附小修改后的代码,供参考 [c

本帖最后由 编程 于 2011-10-16 21:40 编辑

{:soso_e179:} 楼主很强,附小修改后的代码,供参考

import key;
import mouse;
import process;
import winex;
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; text="aardio Form";right=346;bottom=138 )
winform.add(
btnCall={ bottom=88;text=
"Call自动扫雷";left=187;top=49;z=2;right=291;cls="button" };
btnMouse={ bottom=88;text=
"鼠标自动扫雷";left=52;top=49;z=1;right=156;cls="button" }
)
/*}}*/

var CALLADDR = 0x010037E1   //call地址
var DATABASE = 0x1005340    //棋盘基址
var SETBASE = 0x01005330         //设置基址+0:雷点个数 +4:棋盘宽 +8:棋盘高
var XYBASE = 0x01005118                //call参数:XYBASE:x   XYBASE+4:y

sweeper  =
function(byMouse){

   
var prc = process("winmine.exe") //创建扫雷进程
    //这里最好指定进程ID,不然会找到你刚发的贴子窗口,因为浏览器标题栏也有"扫雷"这几个字
    hwnd = winex.waitVisible( "<扫雷>|<Minesweeper>",,,,,prc.id );  //获取窗口句柄      
    win.setForeground(hwnd) //外部进程最好用这个函数              
    var x,y,cx,cy=win.getPos(hwnd);    //获取窗口坐标
   
   
var width = prc.readNumber(SETBASE+4,"INT")
   
var height = prc.readNumber(SETBASE+8,"INT")
   
var Act_c = prc.remoteApi("void()", CALLADDR);  //获取远程call
    for(j=1;height){
        
for(i=1;width) begin
            
var n = prc.readNumber(DATABASE+i+32*j,"byte")  //棋盘基址+x+y*32=棋盘点的值
            // 未点击时:无雷:0f;;;有雷,8f (有用) 点击后:无雷:4x,x=周围雷的个数;;;有雷8x
            if(n==0x0f) {
               
if(byMouse){
                    mouse.move(x+4+16*i,y+96+16*j,
true);  //移动到坐标点
                    mouse.click();  
                    win.delay(10);
//加点延时,不然太快完成看不到过程
                }
               
else {
                    prc.writeNumber(XYBASE,i,
"INT")  //写X坐标
                    prc.writeNumber(XYBASE+4,j,"INT")  //写Y坐标
                    Act_c();//点击函数
                    win.delay(100); //加点延时,不然太快完成看不到过程
                }
            };
        
end;
    }
    prc.free();  
//释放句柄
}

winform.btnCall.oncommand =
function(){
    sweeper(
false)
}
  
winform.btnMouse.oncommand=
function(){
    sweeper(
true)
}

winform.show()
import win.version
if( ! win.version.isXp ) {
    winform.msgboxErr(
"此程序仅用于XP系统扫雷游戏")
    winform.btnCall.disabled=
true;
    winform.btnMouse.disabled=
true;
}

win.loopMessage();

点评

真棒: 5.0
真棒: 5
  发表于 2011-10-12 09:28
www378660084 发表于 2011-10-11 23:02:07

[quote][size=2][color=#999999]编程 发表于 2011-10-11 22:34[/color] [url=forum.php?mod

编程 发表于 2011-10-11 22:34
楼主很强,附小修改后的代码,供参考

import key;

看了改动的几处,都很不错,3ks,昨晚不能上网抽空研究一下aardio,写了这个玩意,感觉aardio用起来真的很不错~
论坛的代码要能加上高亮就好了
fyy 发表于 2011-10-11 23:54:41

远程call看起来有难度,不错的范例

远程call看起来有难度,不错的范例
ghl781258 发表于 2011-10-12 07:35:00

很好的学习资料。收藏备用了!

很好的学习资料。收藏备用了!
Auto 发表于 2011-10-12 08:51:24

强大{:soso_e100:},学习。

强大{:soso_e100:},学习。
qwaq001 发表于 2011-10-12 09:53:34

很好的学习资料。{:3_41:}{:3_41:}

很好的学习资料。
xx44t10 发表于 2011-10-12 13:24:13

楼上好牛啊。不错。

楼上好牛啊。不错。
maiev 发表于 2011-10-16 00:18:55

顶。aardio真的不错

顶。aardio真的不错
sj798 发表于 2011-10-16 16:21:04

顶起来,好好学习

顶起来,好好学习
ddaw 发表于 2011-10-16 20:34:13

很好的学习材料

很好的学习材料
dafei2599 发表于 2011-10-17 12:38:29

Call是怎么找到的?共享一下方法呗,嘿嘿{:3_46:}

Call是怎么找到的?共享一下方法呗,嘿嘿
善良的自行车 发表于 2011-11-21 00:00:06

我晕,我想知道,函数基值这样的东西是怎么查的?

我晕,我想知道,函数基值这样的东西是怎么查的?
满月星光 发表于 2011-12-23 19:11:32

用CE 或OD 不知我说的可行。

用CE 或OD 不知我说的可行。
lukewang 发表于 2011-12-27 13:24:50

{:soso_e179:} 高!

{:soso_e179:}
高!
boot 发表于 2011-12-30 11:53:40

Cheat Engine ollydbg Dependency Walker 这个最简单了

Cheat Engine

ollydbg

Dependency Walker  这个最简单了
洋葱。 发表于 2012-1-17 10:40:01

马克。 留着学习。

马克。  留着学习。
123下一页

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

GMT+8, 2017-11-21 16:05 , Processed in 0.078125 second(s), 26 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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