[再次无聊]扫雷外挂for win2000&xp
来源:互联网 发布:如何学软件编程课程 编辑:程序博客网 时间:2024/04/28 15:25
在form1上摆了button1之后,偶又改写了如下的东东,让偶的外挂可以支持xp的扫雷。真是大快人心(-___-b)
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
BOMB_MAP_MAX_SIZE = 32 * 24;
ADDR_MAPHEIGHT = $01005A68;
ADDR_MAPWIDTH = $010056F8;
ADDR_BOMBMAP = $01005720;
ADDR_MAPHEIGHT_XP = $01005338;
ADDR_MAPWIDTH_XP = $01005334;
ADDR_BOMBMAP_XP = $01005360;
type
TWinMineData = class
private
FData: PByteArray;
FWidth: Integer;
FHeight: Integer;
FIsXP: Boolean;
public
constructor Create;
destructor Destroy; override;
procedure Init(AWnd: HWND);
function GetAt(X, Y: Integer): Byte;
property Width: Integer read FWidth;
property Height: Integer read FHeight;
property IsXP: Boolean read FIsXP;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function GetBlockPoint(AWnd: HWND; X, Y: Integer): TPoint;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Wnd: HWND;
Data: TWinMineData;
I, J: Integer;
Pt: TPoint;
begin
Wnd := FindWindow('扫雷', nil);
if Wnd = 0 then ShowMessage('请先启动扫雷')
else
begin
Data := TWinMineData.Create;
try
Data.Init(Wnd);
for J := 0 to Data.Height - 1 do
begin
for I := 0 to Data.Width - 1 do
begin
Pt := GetBlockPoint(Wnd, I, J);
if (Data.GetAt(I, J) and $80) <> 0 then
begin
PostMessage(Wnd, WM_RBUTTONDOWN, 0, MAKELPARAM(Pt.X, Pt.Y));
PostMessage(Wnd, WM_RBUTTONUP, 0, MAKELPARAM(Pt.X, Pt.Y));
end
else
begin
PostMessage(Wnd, WM_LBUTTONDOWN, 0, MAKELPARAM(Pt.X, Pt.Y));
PostMessage(Wnd, WM_LBUTTONUP, 0, MAKELPARAM(Pt.X, Pt.Y));
end;
end;
end;
finally
FreeAndNil(Data);
end;
end;
end;
{ TWinMineData }
constructor TWinMineData.Create;
begin
FData := AllocMem(BOMB_MAP_MAX_SIZE);
end;
destructor TWinMineData.Destroy;
begin
FreeMem(FData);
inherited;
end;
function TWinMineData.GetAt(X, Y: Integer): Byte;
begin
Result := FData[Y * 32 + (X + 1)];
end;
procedure TWinMineData.Init(AWnd: HWND);
var
ProcId: Cardinal;
HProc: HMODULE;
Readed: Cardinal;
R: TRect;
L: Integer;
begin
ProcId := 0;
GetWindowThreadProcessId(AWnd, ProcId);
GetClientRect(AWnd, R);
if ProcId = 0 then raise Exception.Create('process id get failed');
HProc := OpenProcess(PROCESS_VM_READ, False, ProcId);
try
ReadProcessMemory(HProc, Pointer(ADDR_MAPWIDTH), @FWidth, 4, Readed);
ReadProcessMemory(HProc, Pointer(ADDR_MAPHEIGHT), @FHeight, 4, Readed);
ReadProcessMemory(HProc, Pointer(ADDR_BOMBMAP), FData, BOMB_MAP_MAX_SIZE, Readed);
L := R.Bottom - R.Top - FHeight * 16;
if L <> 83 then
begin
FIsXP := True;
ReadProcessMemory(HProc, Pointer(ADDR_MAPWIDTH_XP), @FWidth, 4, Readed);
ReadProcessMemory(HProc, Pointer(ADDR_MAPHEIGHT_XP), @FHeight, 4, Readed);
ReadProcessMemory(HProc, Pointer(ADDR_BOMBMAP_XP), FData, BOMB_MAP_MAX_SIZE, Readed);
end;
finally
CloseHandle(HProc);
end;
end;
function TForm1.GetBlockPoint(AWnd: HWND; X, Y: Integer): TPoint;
begin
Result.X := X * 16 + 19;
Result.Y := Y * 16 + 64;
end;
end.
- [再次无聊]扫雷外挂for win2000&xp
- [无聊]扫雷外挂(for win2000)
- VC编程——XP扫雷外挂
- Windows Xp 扫雷外挂(控制台版)
- 【源码备份】XP下扫雷外挂
- 扫雷外挂
- 扫雷外挂
- DDK FOR WIN2000 OR WIN XP 求助??
- 扫雷山寨外挂
- "扫雷外挂" 原理篇
- 扫雷外挂制作
- 扫雷外挂程序开发
- 校园通uu build 2003.09.11 for win2000/xp 绿色
- 校园通uu build 2003.09.11 for win2000/xp 官网
- 作为开篇,就先塞个自己写的东西,XP扫雷小外挂,没什么技术含量
- MFC扫雷外挂的编程
- Win7 32bit 扫雷外挂
- WIN2000/XP进程详解
- SQL 语法参考手册
- think and do~
- 如何向水晶报表的子报表中添加 页头和页脚
- 一个精致的camera类,我喜欢它。
- 手机惊曝最新功能 65分钟将生鸡蛋煮熟(组图)
- [再次无聊]扫雷外挂for win2000&xp
- 功能测试自动化的投入和产出
- 用户不上你的网站的50个原因
- 应该注意的网站设计的四点矛盾
- 智力题用编个程序接出来
- Oracle创建文件默认地点
- log4j的各种appender
- 实战Delphi数据网格(TDBGrid)色彩特效
- 论软件系统分析的方法和策略