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& CloseHandle hProcess End If Label1.Caption = h '输出生命值