失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 一天一天学做外挂@第二天-实现VB显示游戏数据[武林外传]

一天一天学做外挂@第二天-实现VB显示游戏数据[武林外传]

时间:2019-12-26 17:35:58

相关推荐

一天一天学做外挂@第二天-实现VB显示游戏数据[武林外传]

学习目的:

利用已知的地址,在VB中显示游戏中的相关数据。

内容:

1.建立一个新的标准EXE工程,我们就可以开始这次的学习了。

2.我们要建立一个模块,然后添加以下代码:

Option Explicit

'---------------声明函数-----------------------

'得到窗体句柄的函数,FindWindow函数用来返回符合指定的类名( ClassName )和窗口名( WindowTitle )的窗口句柄

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'得到窗体控件句柄的函数

Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

'得到进程标识符的函数

Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

'得到目标进程句柄的函数

Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

'关闭句柄的函数

Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

'读取进程内存的函数

Public Declare Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long

'参数决定了对进程的存储权限,使用完全控制

Public Const PROCESS_ALL_ACCESS = &H1F0FFF

3.接下来Form中,我们要在程序启动时连接游戏窗口,以下是Form_Load的代码:

Dim hwd As Long ‘ 储存 FindWindow 函数返回的句柄

Dim pid As Long

Dim hProcess As Long '存放进程句柄

Private Sub Form_Load()

hwd = FindWindow("QElementClient Window", "Element Client")

If hwd = 0 Then

MsgBox "未启动游戏", vbOKOnly, "提示"

Unload Form1

End If

GetWindowThreadProcessId hwd, pid '获取进程标识符

'将进程标识符做为参数,返回目标进程PID的句柄,得到此句柄后

'即可对目标进行读写操,PROCESS_ALL_ACCESS表示完全控制,权限最大

hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid)

If hProcess = 0 Then

MsgBox "不能打开进程", vbOKOnly, "提示"

Unload Form1

End If

CloseHandle hProcess

4.我们在Form中添加一个Label控件和一个Timer控件,设置Timer的Interval属性为100,Timer1_Timer的代码如下:

Dim h As Long

hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid)

If hProcess Then

ReadProcessMemory hProcess, ByVal &H8C6A54, h, 4, 0& ‘这三条代码读取获得生命值

ReadProcessMemory hProcess, ByVal h + &H24, h, 4, 0&

ReadProcessMemory hProcess, ByVal h + &H254, h, 4, 0&

'byval + 地址 难道是表示取的是地址里面的内容

CloseHandle hProcess

End If

Label1.Caption = h ‘输出生命值

5.好了,数据显示出来了。程序很简单,重点是大家要举一反三。

如果觉得《一天一天学做外挂@第二天-实现VB显示游戏数据[武林外传]》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。