|
|
http://yunpan.cn/QGq4crLZerQ9S
.
unit DDP_MAIN;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Timer1: TTimer;
Button3: TButton;
Label2: TLabel;
Button4: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
// procedure autoPlay(pa,pb:TPoint);
private
{ Private declarations }
public
{ Public declarations }
end;
{座位号地 00480AAC
一号位棋盘地址 0047D5B0
二号位棋盘地址 0047E18C
三号位棋盘地址 0047ED68
四号位棋盘地址 0047F944
1蛙 2鸭 3猫 4熊 5狐 6牛 7猴
X=25 Y=8
加速地址:0041e43d
点1坐标:300*100
棋盘大小384,每格48
}
var
Form1: TForm1;
游戏窗口: HWND;
游戏ID WORD;
打开句柄:THandle;
坐位号 WORD;
号地址 WORD;
坐位号基址 WORD;
棋盘基址:ARRAY[0..3] OF ^Dword=(Pointer( $0047D5B0),
Pointer( $0047E18C),
Pointer( $0047ED68),
Pointer( $0047F944));
implementation
{$R *.dfm}
procedure 交换两点(点1坐标,点2坐标:TPoint); //非得放最前面
var
点1,点2:TPoint;
点击地址 WORD;
begin
//点1.X:=300+48*0;点1.Y:=100+48*0;
//点2.X:=300+48*1;点2.Y:=100+48*0;
点1.X:=300+48*点1坐标.X;点1.Y:=100+48*点1坐标.Y;
点2.X:=300+48*点2坐标.X;点2.Y:=100+48*点2坐标.Y;
点击地址:=点1.X+点1.Y shl 16;
sendmessage(游戏窗口,Messages.WM_LBUTTONDOWN,0,点击地址);
sendmessage(游戏窗口,Messages.WM_LBUTTONUP,0,点击地址);
点击地址:=点2.X+点2.Y shl 16;
sendmessage(游戏窗口,Messages.WM_LBUTTONDOWN,0,点击地址);
sendmessage(游戏窗口,Messages.WM_LBUTTONUP,0,点击地址);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
点1坐标,点2坐标:TPoint;
begin
点1坐标.X:=0;点1坐标.y:=0;
点2坐标.x:=1;点2坐标.Y:=0;
交换两点 (点1坐标,点2坐标);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
sendmessage(游戏窗口,messages.WM_LBUTTONDOWN ,0,$0180017A);// 按下鼠标左键
sendmessage(游戏窗口,messages.WM_LBUTTONUP ,0, $0180017A); //抬起鼠标左键
end;
procedure TForm1.Button4Click(Sender: TObject);
var
棋盘数组:array[1..8,1..25]of Byte;
临时地址 WORD;
X,Y WORD;
I:string;
begin
游戏窗口:=FindWindow(nil,'对对碰角色版');
坐位号基址:=0 ;
号地址:=0;
memo1.text:='';
if 游戏窗口>0 then
begin
GetWindowThreadProcessId(游戏窗口,游戏ID);
打开句柄:=OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE,False,游戏ID);
ReadProcessMemory(打开句柄,Pointer($00480AAC),@坐位号,4,临时地址);
{ if 坐位号=0 then 坐位号基址:= $0047D5B0
else
if 坐位号=1 then 坐位号基址:= $0047E18C
else
if 坐位号=2 then 坐位号基址:= $0047ED68
else
if 坐位号=3 then 坐位号基址:=$0047F944; }
ReadProcessMemory(打开句柄,棋盘基址[坐位号],@棋盘数组,200,号地址) ;
for y := 1 to 8 do
begin
i:='';
for x := 1 to 8 do
i:=i+inttostr(棋盘数组[X][Y])+',';
Memo1.lines.add(i);
end;
end;
if 游戏窗口=0 then Form1.Label1.Caption:='请开启游戏';
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
游戏窗口:=FindWindow(nil,'对对碰角色版');
if 游戏窗口>0 then
begin
Form1.Label1.Caption:='找到游戏了';
GetWindowThreadProcessId(游戏窗口,游戏ID);
打开句柄:=OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE,False,游戏ID);
坐位号:=0 ;
ReadProcessMemory(打开句柄,Pointer($00480AAC),@坐位号,4,号地址);
坐位号:=坐位号+1 ;
form1.Label2.Caption:='当前坐位号'+IntToStr(坐位号);
end
else
begin
Form1.Label1.Caption:='请开启游戏';
end;
end;
end.
|
|