自动扫雷程序

本文介绍了作者如何利用C#和Delphi编写自动扫雷程序,通过读取Windows扫雷程序的内存数据来判断雷区状态,并模拟鼠标点击实现自动扫雷。程序首先根据系统版本确定内存地址,然后读取宽度、高度和雷数,接着创建扫雷界面并检测每个按钮下的雷,最后模拟鼠标消息完成自动扫雷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多人喜欢玩Windows的扫雷程序,去年11月份写了这个小程序,那时还在Infosys。

以下是去年在我的MSN Sapce上写的:

这两天挺无聊的,Bob的扫雷战绩越来越令人惊叹,中级达到26秒,于此情况,我不得不使出了杀手锏——改注册表,将战绩定格为1秒,不过或许这样显得太贪心了,所以马上被识破,于是,鄙视的眼光投了过来,似乎我成了一个“卑鄙龌鹾”,用下三烂的手段获取胜利的人,一下子一种“窝囊的火气”涌上心来,我决定要以技取胜,于是,上网查了一点WINDOWS扫雷程序的资料,发现原来还真容易,欣喜,马上动手写了个自动扫雷程序,详情如下:
 
对于WIN2000,雷区的宽度数据保存在0x10056f8,高度数据保存在0x1005a68,雷的数目保存在0x1005a6c,雷的布局数据起始地址为0x1005700;
对于WINXP,分别是0x1005334、0x1005338、0x1005330、0x1005340。
如果某个按钮下是雷,那么这个内存数据对应的数值必然为0x8F,如此,离开胜利不远了,然后用VS的SPY程序获取到了扫雷界面第一个按钮的坐标为:(11, 54),并且获取到了鼠标消息的参数lParam和wParam,OK,根据这些数据,就可以还原出暴露的雷区布局,再将坐标做一下简单的数学转换,那么按下这个程序的某个按钮,将鼠标消息同时发给WINDOWS扫雷程序就可以了,如此,相应的扫雷程序的那个按钮也被按下,再加个自动进行所有非雷按钮的MOUSE_UP事件进行一遍,不就实现了自动扫雷了吗?为了降低速度,再加个速度调节,根据指定速度对主线程进行休眠,哈哈,搞定!

起初这个软件我是用C#写的,后来发现在.NET中发送大量的消息到某个窗口时,.显得很慢,于是用Delphi重写了一遍,结果速度非常快。

1。首先取得操作系统的版本,以便获知究竟从什么内存地址读雷区数据:
procedure TfrmMain.FormCreate(Sender: TObject);
var
  ver:Cardinal;
  majorVer: Cardinal;
  minorVer: Cardinal;
begin
  ver :
=  GetVersion();
  majorVer :
=  LOByte(ver);
  minorVer :
=  HIByte(ver);
  
if  majorVer  >=   5  then
  begin
    
if  minorVer  =   0  then     // Win2000
    begin
      nWidthAddress    :
=  $10056F8;
            nHeightAddress :
=  $1005A68;
            nMinesAddress    :
=  $1005A6C;
            nCellBaseAddress :
=  $ 1005700 ;
    end
    
else                      // WinXP
    begin
      nWidthAddress    :
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值