level 7
doable2012
楼主
首先感谢CE大神的原教程 @莪芯囿祢
DNF毁我一生





教程开始 代码开始
-------------------------------分割线-------------------------------
'定义全局变量
Option Explicit '强制声明变量
Dim PID As Long '定义进程ID为变量
Dim lphwnd As Long '定义窗口为变量
Dim RW As Long '定义人物为变量
Dim RWZB As Long '定义人物装备为变量
Dim RWZBYS As Long '定义人物装备移速为变量
Dim RWZBSQ As Long '定义人物装备属强为变量
Dim YS1 As Long '定义增加后的移速为变量
Dim YS2 As Long '定义减少后的移速为变量
Dim SQ1 As Long '定义增加后的属强为变量
Dim SQ2 As Long '定义减少后的属强为变量
'定义几个用到的模块
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer '
Private Declare Function MessageBoxTimeout Lib "user32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long, ByVal wlange As Long, ByVal dwTimeout As Long) As Long
'定义基址常量
Private Const JW_Address As Long = &H1515C6B '捡物基址
Private Const RW_Address As Long = &H332D3E0 '人物基址
Private Const CD_Address As Long = &H149FF13 '无CD基址
'定义偏移常量
Private Const ZB_Offset As Long = &H2930 '装备偏移
Private Const BT_Offset As Long = &H7F4 '霸体偏移
Private Const WD_Offset As Long = &H1184 '无敌偏移
Private Const YS_Offset As Long = &H938 '移速偏移
Private Const SQ_Offset As Long = &HC50 '属强偏移
Private Const HP_Offset As Long = &H2F24 'HP偏移
Private Const MP_Offset As Long = &H2F28 'MP偏移
'响应按钮1
Private Sub Command1_Click()
MsgBox "请务必使用管理员运行工具" & Chr(10) & "先启动游戏,后打开辅助" & Chr(10) & "切换角色后,不需要关闭辅助工具" & Chr(10) & "╔------------------------------╗" & Chr(10) & "┆键盘示意图所示: ┆" & Chr(10) & "┆波浪键开启 无敌/霸体 ┆" & Chr(10) & "┆ 技能无CD/自动捡物 ┆" & Chr(10) & "┆ ┆" & Chr(10) & "┆快捷键7减少人物移动速度 ┆" & Chr(10) & "┆快捷键8增加人物移动速度 ┆" & Chr(10) & "┆(移动速度推荐100%-200%) ┆" & Chr(10) & "┆ ┆" & Chr(10) & "┆快捷键9减少人物属性强化 ┆" & Chr(10) & "┆快捷键0增加人物属性强化 ┆" & Chr(10) & "┆(全属强增加推荐150-200) ┆" & Chr(10) & "┆ ┆" & Chr(10) & "┆= 键恢复100%的HP和MP值 ┆" & Chr(10) & "╚------------------------------╝" & Chr(10) & " 辅助仅供学习研究使用,请于下载后24 小时内删除!" & Chr(10) & " 作者不承担一切后果与责任, 必须同意此条款方可继续使用!" & Chr(10) & " 禁止外传和复制以及盗版!"
End Sub
'主窗口载入内容
Private Sub Form_Load()
Timer1.Interval = 100 '时间控件1响应频率
Timer2.Interval = 100 '时间控件2响应频率
Timer3.Interval = 100 '时间控件3响应频率
Timer4.Interval = 100 '时间控件4响应频率
Timer5.Interval = 100 '时间控件5响应频率
Timer6.Interval = 100 '时间控件6响应频率
lphwnd = FindWindow(vbNullString, "地下城与勇士") '查找窗口
GetWindowThreadProcessId lphwnd, PID '获取进程ID
If lphwnd = 0 Then '如果进程ID为空,则
MessageBoxTimeout Me.hwnd, "请先启动游戏", "警告", 0, 0, 600 '600毫秒弹出可自动关闭的无属性弹窗
Unload Me '关闭窗体
End If
End Sub
'获取内存模块
Private Function readmemory(ByVal address As Long) As Long
Dim buffer As Long
Dim biread As Long
Dim binheritprocss As Long
binheritprocss = OpenProcess(&H1F0FFF, False, PID) '获取操作句柄
biread = ReadProcessMemory(binheritprocss, address, VarPtr(buffer), 4, 0) '读取内存
If biread = 0 Then
MessageBoxTimeout Me.hwnd, "内存获取失败", "警告", 0, 0, 300
CloseHandle binheritprocss
readmemory = 0
Exit Function
End If
readmemory = buffer
CloseHandle binheritprocss
End Function
'写内存模块
Private Sub writememory(ByVal address As Long, ByVal setvalue As Long)
Dim binheritprocss As Long
Hex binheritprocss & address
binheritprocss = OpenProcess(&H1F0FFF, False, PID) '获取操作句柄
WriteProcessMemory binheritprocss, address, VarPtr(setvalue), 4, 0 '写入内存
CloseHandle binheritprocss
End Sub
'时间控件1触发内容
Private Sub Timer1_Timer()
If GetAsyncKeyState(192) Then '如果获取用户按下了·键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
writememory CD_Address, &H7D8025EB '把技能无CD的数值写进内存
writememory JW_Address, &H4D8B0134 '把自动捡物的数值写进内存
writememory RW + BT_Offset, &H1 '把霸体的数值写进内存
writememory RWZB + WD_Offset, &H64 '把无敌的数值写进内存
End If
End Sub
'时间控件2触发内容
Private Sub Timer2_Timer()
If GetAsyncKeyState(55) Then '如果获取用户按下了7键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBYS = readmemory(RWZB + YS_Offset) '每次重新读取人物装备移速
YS1 = RWZBYS + &H64 '每次重新计算增加后的移速
writememory RWZB + YS_Offset, YS1 '写内存计算后的移速数值
End If
End Sub
'时间控件3触发内容
Private Sub Timer3_Timer()
If GetAsyncKeyState(56) Then '如果获取用户按下了8键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBYS = readmemory(RWZB + YS_Offset) '每次重新读取人物装备移速
YS2 = RWZBYS - &H64 '每次重新计算减少后的移速
writememory RWZB + YS_Offset, YS2 '写内存计算后的移速数值
End If
End Sub
'时间控件4触发内容
Private Sub Timer4_Timer()
If GetAsyncKeyState(57) Then '如果获取用户按下了9键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBSQ = readmemory(RWZB + SQ_Offset) '每次重新读取人物装备属强
SQ1 = RWZBSQ + &H32 '每次重新计算增加后的属强
writememory RWZB + SQ_Offset, SQ1 '写内存计算后的属强数值
End If
End Sub
'时间控件5触发内容
Private Sub Timer5_Timer()
If GetAsyncKeyState(48) Then '如果获取用户按下了0键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBSQ = readmemory(RWZB + SQ_Offset) '每次重新读取人物装备属强
SQ2 = RWZBSQ - &H32 '每次重新计算减少后的属强
writememory RWZB + SQ_Offset, SQ2 '写内存计算后的属强数值
End If
End Sub
'时间控件6触发内容
Private Sub Timer6_Timer()
If GetAsyncKeyState(187) Then '如果获取用户按下了=键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
writememory RW + HP_Offset, &H64 '写内存HP值
writememory RW + MP_Offset, &H64 '写内存MP值
End If
End Sub
2016年03月03日 14点03分
1
DNF毁我一生





教程开始 代码开始-------------------------------分割线-------------------------------
'定义全局变量
Option Explicit '强制声明变量
Dim PID As Long '定义进程ID为变量
Dim lphwnd As Long '定义窗口为变量
Dim RW As Long '定义人物为变量
Dim RWZB As Long '定义人物装备为变量
Dim RWZBYS As Long '定义人物装备移速为变量
Dim RWZBSQ As Long '定义人物装备属强为变量
Dim YS1 As Long '定义增加后的移速为变量
Dim YS2 As Long '定义减少后的移速为变量
Dim SQ1 As Long '定义增加后的属强为变量
Dim SQ2 As Long '定义减少后的属强为变量
'定义几个用到的模块
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer '
Private Declare Function MessageBoxTimeout Lib "user32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long, ByVal wlange As Long, ByVal dwTimeout As Long) As Long
'定义基址常量
Private Const JW_Address As Long = &H1515C6B '捡物基址
Private Const RW_Address As Long = &H332D3E0 '人物基址
Private Const CD_Address As Long = &H149FF13 '无CD基址
'定义偏移常量
Private Const ZB_Offset As Long = &H2930 '装备偏移
Private Const BT_Offset As Long = &H7F4 '霸体偏移
Private Const WD_Offset As Long = &H1184 '无敌偏移
Private Const YS_Offset As Long = &H938 '移速偏移
Private Const SQ_Offset As Long = &HC50 '属强偏移
Private Const HP_Offset As Long = &H2F24 'HP偏移
Private Const MP_Offset As Long = &H2F28 'MP偏移
'响应按钮1
Private Sub Command1_Click()
MsgBox "请务必使用管理员运行工具" & Chr(10) & "先启动游戏,后打开辅助" & Chr(10) & "切换角色后,不需要关闭辅助工具" & Chr(10) & "╔------------------------------╗" & Chr(10) & "┆键盘示意图所示: ┆" & Chr(10) & "┆波浪键开启 无敌/霸体 ┆" & Chr(10) & "┆ 技能无CD/自动捡物 ┆" & Chr(10) & "┆ ┆" & Chr(10) & "┆快捷键7减少人物移动速度 ┆" & Chr(10) & "┆快捷键8增加人物移动速度 ┆" & Chr(10) & "┆(移动速度推荐100%-200%) ┆" & Chr(10) & "┆ ┆" & Chr(10) & "┆快捷键9减少人物属性强化 ┆" & Chr(10) & "┆快捷键0增加人物属性强化 ┆" & Chr(10) & "┆(全属强增加推荐150-200) ┆" & Chr(10) & "┆ ┆" & Chr(10) & "┆= 键恢复100%的HP和MP值 ┆" & Chr(10) & "╚------------------------------╝" & Chr(10) & " 辅助仅供学习研究使用,请于下载后24 小时内删除!" & Chr(10) & " 作者不承担一切后果与责任, 必须同意此条款方可继续使用!" & Chr(10) & " 禁止外传和复制以及盗版!"
End Sub
'主窗口载入内容
Private Sub Form_Load()
Timer1.Interval = 100 '时间控件1响应频率
Timer2.Interval = 100 '时间控件2响应频率
Timer3.Interval = 100 '时间控件3响应频率
Timer4.Interval = 100 '时间控件4响应频率
Timer5.Interval = 100 '时间控件5响应频率
Timer6.Interval = 100 '时间控件6响应频率
lphwnd = FindWindow(vbNullString, "地下城与勇士") '查找窗口
GetWindowThreadProcessId lphwnd, PID '获取进程ID
If lphwnd = 0 Then '如果进程ID为空,则
MessageBoxTimeout Me.hwnd, "请先启动游戏", "警告", 0, 0, 600 '600毫秒弹出可自动关闭的无属性弹窗
Unload Me '关闭窗体
End If
End Sub
'获取内存模块
Private Function readmemory(ByVal address As Long) As Long
Dim buffer As Long
Dim biread As Long
Dim binheritprocss As Long
binheritprocss = OpenProcess(&H1F0FFF, False, PID) '获取操作句柄
biread = ReadProcessMemory(binheritprocss, address, VarPtr(buffer), 4, 0) '读取内存
If biread = 0 Then
MessageBoxTimeout Me.hwnd, "内存获取失败", "警告", 0, 0, 300
CloseHandle binheritprocss
readmemory = 0
Exit Function
End If
readmemory = buffer
CloseHandle binheritprocss
End Function
'写内存模块
Private Sub writememory(ByVal address As Long, ByVal setvalue As Long)
Dim binheritprocss As Long
Hex binheritprocss & address
binheritprocss = OpenProcess(&H1F0FFF, False, PID) '获取操作句柄
WriteProcessMemory binheritprocss, address, VarPtr(setvalue), 4, 0 '写入内存
CloseHandle binheritprocss
End Sub
'时间控件1触发内容
Private Sub Timer1_Timer()
If GetAsyncKeyState(192) Then '如果获取用户按下了·键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
writememory CD_Address, &H7D8025EB '把技能无CD的数值写进内存
writememory JW_Address, &H4D8B0134 '把自动捡物的数值写进内存
writememory RW + BT_Offset, &H1 '把霸体的数值写进内存
writememory RWZB + WD_Offset, &H64 '把无敌的数值写进内存
End If
End Sub
'时间控件2触发内容
Private Sub Timer2_Timer()
If GetAsyncKeyState(55) Then '如果获取用户按下了7键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBYS = readmemory(RWZB + YS_Offset) '每次重新读取人物装备移速
YS1 = RWZBYS + &H64 '每次重新计算增加后的移速
writememory RWZB + YS_Offset, YS1 '写内存计算后的移速数值
End If
End Sub
'时间控件3触发内容
Private Sub Timer3_Timer()
If GetAsyncKeyState(56) Then '如果获取用户按下了8键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBYS = readmemory(RWZB + YS_Offset) '每次重新读取人物装备移速
YS2 = RWZBYS - &H64 '每次重新计算减少后的移速
writememory RWZB + YS_Offset, YS2 '写内存计算后的移速数值
End If
End Sub
'时间控件4触发内容
Private Sub Timer4_Timer()
If GetAsyncKeyState(57) Then '如果获取用户按下了9键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBSQ = readmemory(RWZB + SQ_Offset) '每次重新读取人物装备属强
SQ1 = RWZBSQ + &H32 '每次重新计算增加后的属强
writememory RWZB + SQ_Offset, SQ1 '写内存计算后的属强数值
End If
End Sub
'时间控件5触发内容
Private Sub Timer5_Timer()
If GetAsyncKeyState(48) Then '如果获取用户按下了0键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBSQ = readmemory(RWZB + SQ_Offset) '每次重新读取人物装备属强
SQ2 = RWZBSQ - &H32 '每次重新计算减少后的属强
writememory RWZB + SQ_Offset, SQ2 '写内存计算后的属强数值
End If
End Sub
'时间控件6触发内容
Private Sub Timer6_Timer()
If GetAsyncKeyState(187) Then '如果获取用户按下了=键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
writememory RW + HP_Offset, &H64 '写内存HP值
writememory RW + MP_Offset, &H64 '写内存MP值
End If
End Sub

