找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 197|回复: 0

对对碰

[复制链接]

1793

主题

457

回帖

0

积分

管理员

积分
0
发表于 2013-9-16 22:26:45 | 显示全部楼层 |阅读模式
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;
  游戏IDWORD;
  打开句柄: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,YWORD;
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.

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 04:38 , Processed in 0.113374 second(s), 21 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

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