vb writeProcessMemory问题

来源:百度知道 编辑:UC知道 时间:2024/09/26 04:28:40
&H64C69C是我用游戏修改器找出来的地址,运行以下程序修改,输入数据,输入一位数会出现两位数,两位数会出现多位数,
例如输入3,实际游戏数据:51
4-52
5-53
6-54........
10--12337
11-12593
12-12849
13-13105
14-13361.....
50-12341
51-12597
再输为一位数:

3-51
4-52

大侠,你们知道是怎么回事吗?谢谢

Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const SYNCHRONIZE = &H100000
Const SPECIFIC_RIGHTS_ALL = &HFFFF
Const STANDARD_RIGHTS_ALL = &H1F0000
Const PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
Const PROCESS_VM_OPERATION = &H8&
Const PROCESS_VM_READ = &H10&
Const PROCESS_VM_WRITE = &H20&
Private Sub command1_Click()
Dim a As Long, b As Long, c As Long
'定义三个函数a ,b ,c
a = FindWindow(vbNullString, "程序ABCD")
' 首先取得目标窗口的句柄,并赋值给a
If (a = 0) Then
MsgBox "游戏未运行!"
Exit Sub
End If
'判断FindWindow返回的值是否为0
GetWindowThreadProcess

WriteProcessMemory c, &H64C69C, text1.Text, 2, 0&
改为WriteProcessMemory c, &H64C69C, cInt(text1.Text), 2, 0&试试
因为text1.text在内存中是作为string存储,
3--51,字符"3"的ascii码是51
10--12337, 字符"0"的ascii码是48,"1"是49 48*256+49=12337
VB中"2" + 3都能得到结果5,这里因为VB语法要求比较宽,它本身有一套根据上下文转换变量数据类型的机制,但在调用API时就需要小心了

由于不太方便调试,只能给些参考性的建议,试试下面这句吧
WriteProcessMemory c, &H64C69C, varPtr(cInt(text1.Text)), 2, 0&

WriteProcessMemory c, &H64C69C,byval text1.Text, 2, 0&

我做过 加了byval就行了 你可以试试