我想读一个内存地址的值 ( 积分: 20 )

  • 主题发起人 主题发起人 angel725
  • 开始时间 开始时间
A

angel725

Unregistered / Unconfirmed
GUEST, unregistred user!
0c0890c0这是一个单机游戏血的地址,想自己作个加血的<br>我想守时读这个地址的值,若低于设定值,就按F1自动加血。<br>要怎么做呢,一点思路也没有<br><br><br>也要像VB编程那样吗,读进程句柄,打开进程,读值,在关闭?<br><br>直用delphi能做吗?
 
Delphi是肯定可以的,只不过调用Win32&nbsp;API而已<br>BOOL&nbsp;ReadProcessMemory(<br>&nbsp;&nbsp;HANDLE&nbsp;hProcess,<br>&nbsp;&nbsp;LPCVOID&nbsp;lpBaseAddress,<br>&nbsp;&nbsp;LPVOID&nbsp;lpBuffer,<br>&nbsp;&nbsp;SIZE_T&nbsp;nSize,<br>&nbsp;&nbsp;SIZE_T*&nbsp;lpNumberOfBytesRead<br>);<br>这是读指定进程的指定地址的数据<br><br><br>BOOL&nbsp;WriteProcessMemory(<br>&nbsp;&nbsp;HANDLE&nbsp;hProcess,<br>&nbsp;&nbsp;LPVOID&nbsp;lpBaseAddress,<br>&nbsp;&nbsp;LPCVOID&nbsp;lpBuffer,<br>&nbsp;&nbsp;SIZE_T&nbsp;nSize,<br>&nbsp;&nbsp;SIZE_T*&nbsp;lpNumberOfBytesWritten<br>);<br>这个是写<br><br>你还是先获取游戏的进程句柄再对其操作,不过我不保证NT内核下这样操作是否非法,没试过的,你先试试看
 
FindWindow<br>GetWindowThreadProcessId<br>OpenProcess<br>ReadProcessMemory<br>这是VB上做用到的函数,delphi上也是这样顺序用的吗,<br><br><br>这是我查找计算器的几行,有点问题:<br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;a:Thandle;<br>&nbsp;&nbsp;pid:integer;<br>begin<br>&nbsp;&nbsp;&nbsp;a:=FindWindow('SciCalc',nil);<br>&nbsp;&nbsp;&nbsp;GetWindowThreadProcessId(a,pid);&nbsp;&nbsp;&nbsp;//这行有问题<br>&nbsp;&nbsp;&nbsp;edit1.Text:=inttostr(pid);<br><br>错误:<br>[Error]&nbsp;Unit1.pas(33):&nbsp;There&nbsp;is&nbsp;no&nbsp;overloaded&nbsp;version&nbsp;of&nbsp;'GetWindowThreadProcessId'&nbsp;that&nbsp;can&nbsp;be&nbsp;called&nbsp;with&nbsp;these&nbsp;arguments<br>怎么回事,没有吗?
 
自己弄好了,<br>不过不明白,<br>为什么PID要定义成longword才好使,PID不是一个整形值吗??<br><br>另外:<br><br>如果我打开计算器,返回的PID正确,但我没打开计算器,就总返回一个4360040,是为什么?
 
接受答案了.
 

Similar threads

D
回复
0
查看
911
DelphiTeacher的专栏
D
D
回复
0
查看
868
DelphiTeacher的专栏
D
D
回复
0
查看
840
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
909
DelphiTeacher的专栏
D
后退
顶部