📄 mod05readinfo.bas
字号:
Attribute VB_Name = "Mod05ReadInfo"
Option Explicit
''读取角色名称
Function ReadPartName(hWnd As Long) As String
On Error Resume Next
Dim TempAdr As Long
Dim TempPartName As String
Dim ProcID As Long, hpID As Long
Dim BuffEnum(36) As Byte, BuffL As Long
GetWindowThreadProcessId hWnd, hpID
ProcID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hpID)
If ProcID Then
ReadProcessMemory ProcID, ByVal FirstAdr, TempAdr, 4, 0 '内存基址
ReadProcessMemory ProcID, ByVal TempAdr + &H1C, TempAdr, 4, 0 '人物基址
ReadProcessMemory ProcID, ByVal TempAdr + &H28, TempAdr, 4, 0
ReadProcessMemory ProcID, ByVal TempAdr + EcxPartName, TempAdr, 4, 0 '角色名称地址
ReadProcessMemory ProcID, ByVal TempAdr, ByVal VarPtr(BuffEnum(0)), 36, BuffL '临时角色名称
TempPartName = Left$(BuffEnum, 36)
TempPartName = Trim(KillChr0(Trim(TempPartName)))
Erase BuffEnum
End If
CloseHandle ProcID
ReadPartName = TempPartName
End Function
''仅读取一次的信息
Sub ReadOnce()
On Error Resume Next
Dim BaseAdr As Long, TempAdr As Long
Dim BuffEnum(36) As Byte, BuffL As Long
ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
If ProcessID Then
ReadProcessMemory ProcessID, ByVal FirstAdr, TempAdr, 4, 0 '内存基址
ReadProcessMemory ProcessID, ByVal TempAdr + &H1C, PartAdr, 4, 0 '人物基址
ReadProcessMemory ProcessID, ByVal PartAdr + &H28, BaseAdr, 4, 0 '二级基址
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartId, PartId, 4, 0 '人物ID
ReadProcessMemory ProcessID, ByVal FirstAdr + EcxPartSex, PartSex, 1, 0 '人物性别(0男,1女)
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartName, TempAdr, 4, 0 '角色名称地址
ReadProcessMemory ProcessID, ByVal TempAdr, ByVal VarPtr(BuffEnum(0)), 36, BuffL '临时角色名称
PartName = Trim(KillChr0(Left$(BuffEnum, 36)))
Erase BuffEnum
End If
CloseHandle ProcessID
End Sub
''读取人物信息
Sub ReadPartInfo()
On Error Resume Next
Dim BaseAdr As Long, TempAdr As Long, PartMaxExpAdr As Long
ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
If ProcessID Then
ReadProcessMemory ProcessID, ByVal EcxAlarmStat, AlarmStat, 4, 0 '反外挂星星
ReadProcessMemory ProcessID, ByVal EcxOnline, Online, 4, 0 '在线状态
'---------------------------------------------------------------------------------------
ReadProcessMemory ProcessID, ByVal FirstAdr, TempAdr, 4, 0 '内存基址
ReadProcessMemory ProcessID, ByVal TempAdr + EcxAskStat, AskStat, 4, 0 '邀请框状态
ReadProcessMemory ProcessID, ByVal TempAdr + EcxAskStat - &HC, TempAdr, 4, 0
ReadProcessMemory ProcessID, ByVal TempAdr + &H10, AskStatId, 4, 0 '受邀人ID
ReadProcessMemory ProcessID, ByVal TempAdr + &H14, TeamPara, 4, 0 '接受邀请参数
ReadProcessMemory ProcessID, ByVal PartAdr + &HD0, PartLine, 4, 0 '当前线路
'---------------------------------------------------------------------------------------
ReadProcessMemory ProcessID, ByVal PartAdr + &H8, BaseAdr, 4, 0
ReadProcessMemory ProcessID, ByVal BaseAdr + &H88, MapID, 4, 0 '地图ID
'---------------------------------------------------------------------------------------
ReadProcessMemory ProcessID, ByVal PartAdr + &H28, BaseAdr, 4, 0 '二级基址
'---------------------------------------------------------------------------------------
ReadProcessMemory ProcessID, ByVal PartAdr + &H180, TempAdr, 4, 0
ReadProcessMemory ProcessID, ByVal TempAdr + &H10, GodAndMan, 4, 0 '天人合一状态
'---------------------------------------------------------------------------------------
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxTrumpVer, TrumpVer, 4, 0 '当前法宝精力
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxTrump, TempAdr, 4, 0
ReadProcessMemory ProcessID, ByVal TempAdr + &HC, TempAdr, 4, 0
ReadProcessMemory ProcessID, ByVal TempAdr + &H40, TempAdr, 4, 0
ReadProcessMemory ProcessID, ByVal TempAdr + &HB0, TrumpMaxVer, 4, 0 '最大法宝精力
'---------------------------------------------------------------------------------------
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartLevel, PartLevel, 2, 0 '等级
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartHp, PartHp, 4, 0 '当前气血
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartMaxHp, PartMaxHp, 4, 0 '最大气血
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartMp, PartMp, 4, 0 '当前真气
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartMaxMp, PartMaxMp, 4, 0 '最大真气
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartExp, PartExp, 8, 0 '当前经验
ReadProcessMemory ProcessID, ByVal EcxPartMaxExp + 8 * (PartLevel + 1), PartMaxExp, 8, 0
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartAttDis, PartAttDis, 4, 0 '人物攻击距离
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxBagMoney, BagMoney, 4, 0 '背包金钱
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxSelObjId, SelObjId, 4, 0 '选中目标
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartX, PartX, 4, 0 '位置X
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartY, PartY, 4, 0 '位置Y
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxNpcWinStat, NpcWinStat, 1, 0 'NPC窗口状态
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartStat, TempAdr, 4, 0 '打坐状态
ReadProcessMemory ProcessID, ByVal TempAdr + &H14, TempAdr, 4, 0 '打坐状态
ReadProcessMemory ProcessID, ByVal TempAdr + &H4, PartStat, 4, 0 '打坐状态
CloseHandle ProcessID
''答题星星报警 为了能及时反应
If AlarmStat = 1 Then
Alarm
End If
If Online = 0 And Main.CheOther(2).Value = 1 Then
mciExecute "play lost.wav"
ComStart "停止"
End If
If PartHp = 0 And Main.CheSafe(6).Value = 0 Then
mciExecute "play lost.wav"
End If
End If
End Sub
''读取技能
Sub ReadSkill()
On Error Resume Next
Dim BaseAdr As Long, TempAdr As Long
Dim i As Integer
Dim SkillFAdr As Long, SkillNum As Long, SkillAdr As Long
Dim SkillID As Long, SkillLevel As Long
Dim SNnameAdr As Long, SNnameb(65) As Byte, BuffL As Long, SNname As String
Dim sFile As String, TempString As String
Dim SkillKind As String, SkillBuff As String, SkillName As String
Main.CboWar1.Clear '主动技能
Main.CboWar2.Clear '主动技能
Main.CboSafe(0).Clear '队员加血技能
Main.CboSafe(2).Clear '加血技能
ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
If ProcessID Then
ReadProcessMemory ProcessID, ByVal PartAdr + &H28, BaseAdr, 4, 0 '二级基址
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxSkillNum, SkillNum, 4, 0 '技能个数
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxSkillFAdr, SkillFAdr, 4, 0 '已学技能首地址
For i = 0 To SkillNum - 1
ReadProcessMemory ProcessID, ByVal SkillFAdr + i * &H4, SkillAdr, 4, 0 '已学技能的第几个(Jn_i=0技能数-1)
ReadProcessMemory ProcessID, ByVal SkillAdr + &H8, SkillID, 4, 0 '技能ID
ReadProcessMemory ProcessID, ByVal SkillAdr + &HC, SkillLevel, 4, 0 '技能ID
ReadProcessMemory ProcessID, ByVal SkillAdr + &H4, TempAdr, 4, 0
ReadProcessMemory ProcessID, ByVal TempAdr + &H4, TempAdr, 4, 0
ReadProcessMemory ProcessID, ByVal TempAdr + &H7E, SNnameAdr, 4, 0
ReadProcessMemory ProcessID, ByVal SNnameAdr, SNnameb(0), 64, BuffL '技能名称
SNname = Left$(SNnameb, 64) '名称
SNname = Trim(KillChr0(Trim(SNname)))
sFile = App.Path & "\ZhuXian.ini"
TempString = Space$(100)
GetPrivateProfileString& "SKILL", "Skill" & CStr(SkillID), "0", TempString, 100, sFile
If InStr(Trim(TempString), ",") <= 1 Then
WritePrivateProfileString& "SKILLN", "Skill" & CStr(SkillID), ",0," & SNname, sFile
Else
SkillKind = Mid(Trim(TempString), 1, InStr(Trim(TempString), ",") - 1)
SkillBuff = Mid(Trim(TempString), InStr(Trim(TempString), ",") + 1)
SkillBuff = Mid(SkillBuff, 1, InStr(SkillBuff, ",") - 1)
If SkillBuff = "0" Then SkillBuff = ""
SkillName = Left(Left(CStr(SkillID) & Space(4), 4) & "|" & SkillBuff & Space(8), 8) & "|" & SNname
Select Case SkillKind
Case "1" '主动技能
Main.CboWar1.AddItem SkillName
Case "2" '辅助技能
Main.CboWar2.AddItem SkillName
Case "3" '加血技能
Main.CboSafe(0).AddItem SkillName
Main.CboSafe(2).AddItem SkillName
Case "4" '辅助技能
Main.CboSafe(1).AddItem SkillName
End Select
End If
Next i
End If
CloseHandle ProcessID
End Sub
''读取目标信息
Sub ReadSelObjInfo()
On Error Resume Next
Dim BaseAdr As Long, TempAdr As Long
Dim NextTempAdr As Long, NSelObjId As Long
Dim MonAdrB As Long, MonNum As Long, MonAdrF As Long, MonMax As Long
Dim PlayAdrB As Long, PlayNum As Long, PlayAdrF As Long, PlayMax As Long
Dim BuffEnum(36) As Byte, BuffL As Long
ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
If ProcessID Then
If SelObjId <> 0 Then
If SelObjId < 0 Then
ReadProcessMemory ProcessID, ByVal PartAdr + &H8, TempAdr, 4, 0
ReadProcessMemory ProcessID, ByVal TempAdr + &H20, MonAdrB, 4, 0
ReadProcessMemory ProcessID, ByVal MonAdrB + &H18, MonAdrF, 4, 0 '读出怪物列表的首地址
ReadProcessMemory ProcessID, ByVal MonAdrB + &H24, MonMax, 4, 0 '读出怪物数组的最大值
If (SelObjId Mod MonMax) + 788 > MonMax Then
BaseAdr = MonAdrF + (((SelObjId Mod MonMax) + 788) Mod MonMax) * 4
Else
BaseAdr = MonAdrF + ((SelObjId Mod MonMax) + 788) * 4
End If
ReadProcessMemory ProcessID, ByVal BaseAdr, TempAdr, 4, 0
'新加的下面3行
Do While TempAdr > 0
ReadProcessMemory ProcessID, ByVal TempAdr + 0, NextTempAdr, 4, 0
If TempAdr > 0 Then
ReadProcessMemory ProcessID, ByVal TempAdr + &H4, BaseAdr, 4, 0
'新加的下面2行
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonID, NSelObjId, 4, 0 '怪物ID
If NSelObjId = SelObjId Then
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonKind, SelObjKind, 2, 0 '目标类型
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonLevel, SelObjLevel, 2, 0 '目标等级
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonHp, SelObjHp, 4, 0 '目标当前气血
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonMaxHp, SelObjMaxHp, 4, 0 '目标气血上限
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonX, SelObjX, 4, 0 '目标位置X
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonY, SelObjY, 4, 0 '目标位置Y
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonSel, SelObjSel, 4, 0 '目标的目标的ID
ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonName, TempAdr, 4, 0 '目标名称
ReadProcessMemory ProcessID, ByVal TempAdr, ByVal VarPtr(BuffEnum(0)), 36, BuffL
SelObjName = Left$(BuffEnum, 36)
SelObjName = Trim(KillChr0(Trim(SelObjName)))
'新加下面5行
Exit Sub
End If
End If
TempAdr = NextTempAdr
Loop
ElseIf SelObjId = PartId Then
SelObjX = PartX
SelObjY = PartY
SelObjLevel = PartLevel
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -