MulPointer

unit Unit1; 

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

(*
//用程序显示数据的6个步骤
1->FindWindow(1,2):HWND; {查找窗口}
2->GetWindowThreadProcessId(1,2):Dword; {获取窗口线程ID}
3->OpenProcess(1,2,3):Thandle; {打开进程}
4->ReadProcessMemory(1,2,3,4,5):BOOL; {读取进程内存}
5->CloseHandle(1):BOOL; {关闭句柄}
6->显示并输出结果

//用程序显示数据的6个步骤
//1 查找窗口
FindWindow(1,2):HWND; {查找窗口}
1->lpclassName {窗口的类名}
2->lpWindowName:Pchar {窗口的标题}
example:
myHwnd:=FindWindow(nil,'Step 8'); {HWND失败返回 0}

//2 获取窗口线程ID
GetWindowThreadProcessId(1,2):Dword; {获取窗口线程ID}
1->hwnd HWND {指定窗口句柄}
2->lpdwProcessId Pointer {返回进程 ID 的指针}
example:
  GetWindowThreadProcessId(MyHwnd,@myPid);

//3 打开进程
OpenProcess(1,2,3):Thandle; {打开进程} {成功会返回进程句柄; 失败返回 0}
1->dwDesireAccess:DWORD {访问选项}
2->bInheritHandle:BOOL {能否继承; True 表示能用 CreateProcess 继承句柄创建新进程}
3->dwProcessId:Dword {指定进程 ID}
example:
  myProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,myPid);

//4 读取进程内存
ReadProcessMemory(1,2,3,4,5):BOOL; {读取进程内存}
1->Handle:Hprocess {目标进程句柄}
2->LPCVOID lpBaseAddress {读取数据的起始地址}
3->LPvoid lpBuffer {存放数据的缓存区地址}
4->DWord nSize {要读取的字节数}
5->LPDWORD lpNumberOfBytesRead {实际读取数存放地址} {delphi xe: readByte:SIZE_T;}
example:
  ReadProcessMemory(myProcess,Pointer(BaseAddress),@MyPointer,4,ReadByte);

//5 关闭句柄
CloseHandle(1):BOOL; {关闭句柄}
1->hObject :HANDLE {代表一个已打开对象handle}
example:
  CloseHandle(myProcess);

//06 显示并输出结果
label1.Caption:=inttostr(DsplyObjectValue);
*)


procedure TForm1.Timer1Timer(Sender: TObject);
var
 myHwnd:HWND;
 myPid:dword;
 myProcess:Thandle;
 MyPointer:integer;
 readByte:dword;//readByte:SIZE_T;
 DsplyObjectValue:integer;
 const BaseAddress=$0057C3A0; // [[[[0057C3A0]+1c]+14]+0]+18 =>dsplyValue
 begin
   myHwnd:=FindWindow(nil,'Step 8');//01
   if myHwnd <> 0 then
   begin
     GetWindowThreadProcessID(myHwnd,@myPid); //02
     myProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,myPid); //03
     ReadProcessMemory(myProcess,Pointer(BaseAddress),@MyPointer,4,ReadByte); //04
     ReadProcessMemory(myProcess,Pointer(MyPointer+$c),@MyPointer,4,ReadByte);
     ReadProcessMemory(myProcess,Pointer(MyPointer+$14),@MyPointer,4,ReadByte);
     ReadProcessMemory(myProcess,Pointer(MyPointer+$0),@MyPointer,4,ReadByte);
     ReadProcessMemory(myProcess,Pointer(MyPointer+$18),@DsplyObjectValue,4,ReadByte);
     CloseHandle(myProcess) ;//05
     label1.Caption:=inttostr(DsplyObjectValue); //06 显示并输出结果
     self.Caption :='Form1';
   end;
   if myHwnd = 0 then self.Caption :='no found object!';
end;

end.




附件列表

     

    posted @ 2012-05-26 08:34  XE2011  阅读(166)  评论(0编辑  收藏  举报