看流星社区

 找回密码
 注册账号
查看: 2382|回复: 2

关于过滤不成的解决

[复制链接]

该用户从未签到

发表于 2011-4-13 09:39:43 | 显示全部楼层 |阅读模式
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不会出错了.

该用户从未签到

发表于 2011-4-13 09:39:50 | 显示全部楼层
4楼  发表于: 2007-06-02   
只看该作者 ┊  小 中 大
因为后面的是截断符chr$(0)  不是空格
用下面这个函数去
Function KillChr0(Ans As String) As String
    KillChr0 = Left(Ans, InStr(Ans, vbNullChar) - 1)
End Function

该用户从未签到

发表于 2011-12-2 18:46:19 | 显示全部楼层
当回帖成为了一种习惯
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-3 18:03

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表