Dim a1 As Long
Dim tem As Long
Dim b As Long
a1 = &H73D628
tem = &H60
b = ReadProcessMemory(hwn, a1, tem, 2, 0)
Label2.Caption = b
上边的代码为什么B总是0呀
我用
WriteProcessMemory(hwn, a1, tem, 2, 0)
改不了呀
怎么办
我已经获得进程的最高权利
Dim tem As Long
Dim b As Long
a1 = &H73D628
tem = &H60
b = ReadProcessMemory(hwn, a1, tem, 2, 0)
Label2.Caption = b
上边的代码为什么B总是0呀
我用
WriteProcessMemory(hwn, a1, tem, 2, 0)
改不了呀
怎么办
我已经获得进程的最高权利
我不知道你想做什么,我把格式告诉你,你自己看看,有什么问题在回复。
Public Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
hProcess是指向被读取内存的进程句柄。(句柄必须有process_vm_read来访问应用程序)
lpBaseAddress是指向被读取内存的指定进程中的基地址的指针。(在数据传递之前,系统验证基地址中的所有数据和指定的大小的内存是可读的。如果是这种情况,函数继续运行,否则,函数调用失败)
lpBuffer是指向从指定进程的地址空间接收内容的缓冲区的指针。
nSize是指定进程中要读取的字节数。
lpNumberOfBytesWritten是指向传送到指定进程的实际字节数,此参是可选的,如果此参数为NULL则该参数被忽略。注意,任何有process_vm_read访问权的句柄的程序可以调用此函数。被读取的空间必须是可访问的,否则函数返回0值!
不太明白
Dim hwn As Long
Dim hok As Long
Dim id As LongPrivate Sub Command1_Click()
Dim a1 As Long
Dim tem As Long
Dim b As Long
a1 = &H73D628
tem = &H60
b = ReadProcessMemory(hwn, a1, tem, 2, 0)
Label2.Caption = b
CloseHandle (hok)
'WriteProcessMemory
End SubPrivate Sub Form_Load()
Dim a As Stringhwn = FindWindow("HEROsHERO", vbNullString)
If hwn = False Then
Label1.Caption = "游戏没有运行"
Else
GetWindowThreadProcessId hwn, id
hok = OpenProcess(process_all_access, 0, id)
Label1.Caption = "可以修改了"
End If
End Sub
我写的
可能不对
改的是武林群侠传钱
可是我没读到内存中的钱数呀
还有怎么改
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 WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
b = ReadProcessMemory(hwn, a1, tem, 2, 0)问题应该出在 tem 为 Long 型上,改为 String 就可以了,读出后要用到
'*****************************
'字符转换数值
'*****************************
Function ConvertStringToNumber(s As String) As Double
Dim i As Integer
Dim dblNumber As Double
dblNumber = 0
For i = 1 To Len(s)
dblNumber = Asc(Mid(s, i, 1)) * &H100 ^ (i - 1) + dblNumber
Next i
ConvertStringToNumber = dblNumber
End Function修改游戏的一般方法:
1、FindWindow
2、GetWindowThreadProcessId
3、OpenProcess
4、ReadProcessMemory
5、WriteProcessMemory
6、适当 goto 4 or 5
7、CloseHandle