搜索
查看: 36830|回复: 38

[模拟按键] 自动玩扫雷,鼠标模拟+远程call

    [复制链接]

2

主题

9

帖子

85

积分

一级会员

Rank: 2

积分
85
发表于 2011-10-11 21:45:03 | 显示全部楼层 |阅读模式
本帖最后由 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 赞一个!

查看全部评分

回复

使用道具 举报

65

主题

953

帖子

5036

积分

荣誉会员

Rank: 8Rank: 8

积分
5036
发表于 2011-10-11 22:05:44 | 显示全部楼层

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

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

使用道具 举报

2

主题

9

帖子

85

积分

一级会员

Rank: 2

积分
85
 楼主| 发表于 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  然后论坛发帖选择高级模式  
这样看起来效果更好 代码有高亮  层次更清晰....

改过来了,谢谢提醒
回复

使用道具 举报

43

主题

679

帖子

3805

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3805
发表于 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
回复

使用道具 举报

2

主题

9

帖子

85

积分

一级会员

Rank: 2

积分
85
 楼主| 发表于 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用起来真的很不错~
论坛的代码要能加上高亮就好了
回复

使用道具 举报

5

主题

129

帖子

1392

积分

四级会员

Rank: 6Rank: 6

积分
1392
发表于 2011-10-11 23:54:41 | 显示全部楼层

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

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

使用道具 举报

4

主题

150

帖子

861

积分

三级会员

Rank: 4

积分
861
发表于 2011-10-12 07:35:00 | 显示全部楼层

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

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

使用道具 举报

14

主题

67

帖子

386

积分

荣誉会员

Rank: 8Rank: 8

积分
386
发表于 2011-10-12 08:51:24 | 显示全部楼层

强大{:soso_e100:},学习。

强大{:soso_e100:},学习。
要有学习目标和计划,多做练习,学好aardio
回复

使用道具 举报

0

主题

14

帖子

176

积分

一级会员

Rank: 2

积分
176
发表于 2011-10-12 09:53:34 | 显示全部楼层

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

很好的学习资料。
回复

使用道具 举报

9

主题

79

帖子

582

积分

三级会员

Rank: 4

积分
582
发表于 2011-10-12 13:24:13 | 显示全部楼层

楼上好牛啊。不错。

楼上好牛啊。不错。
回复

使用道具 举报

0

主题

5

帖子

178

积分

一级会员

Rank: 2

积分
178
发表于 2011-10-16 00:18:55 | 显示全部楼层

顶。aardio真的不错

顶。aardio真的不错
回复

使用道具 举报

7

主题

123

帖子

752

积分

三级会员

Rank: 4

积分
752
QQ
发表于 2011-10-16 16:21:04 | 显示全部楼层

顶起来,好好学习

顶起来,好好学习
自己做的更适合自己
回复

使用道具 举报

6

主题

22

帖子

136

积分

一级会员

Rank: 2

积分
136
发表于 2011-10-16 20:34:13 | 显示全部楼层

很好的学习材料

很好的学习材料
回复

使用道具 举报

16

主题

101

帖子

634

积分

三级会员

Rank: 4

积分
634
发表于 2011-10-17 12:38:29 | 显示全部楼层

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

Call是怎么找到的?共享一下方法呗,嘿嘿
回复

使用道具 举报

3

主题

13

帖子

72

积分

一级会员

Rank: 2

积分
72
发表于 2011-11-21 00:00:06 | 显示全部楼层

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

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

使用道具 举报

9

主题

96

帖子

616

积分

三级会员

叫我何细尔

Rank: 4

积分
616
QQ
发表于 2011-12-23 19:11:32 | 显示全部楼层

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

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

使用道具 举报

0

主题

3

帖子

18

积分

新手入门

Rank: 1

积分
18
发表于 2011-12-27 13:24:50 | 显示全部楼层

{:soso_e179:} 高!

{:soso_e179:}
高!
回复

使用道具 举报

0

主题

3

帖子

17

积分

新手入门

Rank: 1

积分
17
发表于 2011-12-30 11:53:40 | 显示全部楼层

Cheat Engine ollydbg Dependency Walker 这个最简单了

Cheat Engine

ollydbg

Dependency Walker  这个最简单了
回复

使用道具 举报

0

主题

1

帖子

36

积分

新手入门

Rank: 1

积分
36
发表于 2012-1-17 10:40:01 | 显示全部楼层

马克。 留着学习。

马克。  留着学习。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-8-14 21:17 , Processed in 0.093750 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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