- 注册时间
- 2011-3-10
- 最后登录
- 1970-1-1
该用户从未签到
|
Public Sub GuoLWuPin()
On Error Resume Next
Dim base As Long '存储地址
Dim mecxi As Long '存储地址
Dim WpNameT As Long '存储地址
Dim pn As Integer, pni As Integer '循环变量
Dim WpName(65) As Byte '存储物品名称
Dim X As Integer
ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
ReadProcessMemory ProcessID, ByVal FirstAdr, mecxi, 4, 0 '这个是人物基指针包含的地址
ReadProcessMemory ProcessID, ByVal mecxi + &H8, mecxi, 4, 0
ReadProcessMemory ProcessID, ByVal mecxi + &H24, mecxi, 4, 0
ReadProcessMemory ProcessID, ByVal mecxi + &H14, M_WPNum, 4, 0
If Form1.Check4(0).Value = 1 Or Form1.Check4(1).Value = 1 Then
If M_WPNum <> 0 Then
For pn = 0 To 768 '循环用来判断那个值内存在物品
ReadProcessMemory ProcessID, ByVal mecxi + &H18, base, 4, 0
ReadProcessMemory ProcessID, ByVal base + pn * 4, base, 4, 0 '从列表中选出地面上物品的地址
If base > 0 Then
ReadProcessMemory ProcessID, ByVal base + 4, base, 4, 0
ReadProcessMemory ProcessID, ByVal base + &H164, WpNameT, 4, 0
ReadProcessMemory ProcessID, ByVal WpNameT, WpName(0), 64, 0 '得到物品名称
If Form1.Check4(0).Value = 1 Then
If InStr(WpName, "配方") > 0 Then '用InSet()进行对比,存在过滤表内容则过滤
WriteProcessMemory ProcessID, ByVal base + &H110, 0, 4, 0 '变ID为0,有捡物品动作但背包内无此物品
End If
End If
If Form1.Check4(1).Value = 1 Then
For pni = 0 To Form1.List3.ListCount - 1
If InStr(WpName, Form1.List3.List(pni)) > 0 Then '用InSet()进行对比,存在过滤表内容则过滤
WriteProcessMemory ProcessID, ByVal base + &H110, 0, 4, 0 '变ID为0,有捡物品动作但背包内无此物品
End If
Next pni
End If
End If
Next pn
End If
End If
CloseHandle ProcessID
End Sub
这是mubbx发的过滤物品的代码,我在用时总出错,这个错出在if InStr(WpName, Form1.List3.List(pni)) > 0对比上,因为WpName得出的字符串前面有一个空格,而Form1.List3.List(pni)后面有多个空格,所以对比时容易出错,我们只要改成If InStr(mid$(WpName, 2, 4), mid$(Form1.List3.List(pni), 2, 4)) > 0 Then不会出错了. |
|