VB外挂吃内存
时间:2011-10-24
来源:互联网
用VB编了个外挂间隔0.1秒读取数据一次,程序可以读出数据,但是不知为什么可用内存不断减少,句柄不断增加。
哪位大侠帮帮忙指出问题在哪,非常感谢!
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub command1_Click()
Dim Hwnd1 As Long ' 储存 FindWindow 函数返回的句柄
Dim PID As Long ' 储存进程标识符( Process Id )
Dim pHandle As Long ' 储存进程句柄
Dim P As Single
Hwnd1 = FindWindow(vbNullString, "网上WSWJ")
If (Hwnd1 = 0) Then
MsgBox "没找到窗口"
Exit Sub
End If
GetWindowThreadProcessId Hwnd1, PID
pHandle = OpenProcess(&H1F0FFF, 0, PID)
If (pHandle = 0) Then
MsgBox "没有获得进程句柄!"
Exit Sub
End If
ReadProcessMemory pHandle, ByVal &H1B810, P, 4, 0& '读出数据P
Text1.Text =P
CloseHandle pHandle ' 关闭进程句柄
End Sub
Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 100
End Sub
Private Sub Timer1_Timer()
Call command1_Click
End Sub
哪位大侠帮帮忙指出问题在哪,非常感谢!
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub command1_Click()
Dim Hwnd1 As Long ' 储存 FindWindow 函数返回的句柄
Dim PID As Long ' 储存进程标识符( Process Id )
Dim pHandle As Long ' 储存进程句柄
Dim P As Single
Hwnd1 = FindWindow(vbNullString, "网上WSWJ")
If (Hwnd1 = 0) Then
MsgBox "没找到窗口"
Exit Sub
End If
GetWindowThreadProcessId Hwnd1, PID
pHandle = OpenProcess(&H1F0FFF, 0, PID)
If (pHandle = 0) Then
MsgBox "没有获得进程句柄!"
Exit Sub
End If
ReadProcessMemory pHandle, ByVal &H1B810, P, 4, 0& '读出数据P
Text1.Text =P
CloseHandle pHandle ' 关闭进程句柄
End Sub
Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 100
End Sub
Private Sub Timer1_Timer()
Call command1_Click
End Sub
作者: sys668 发布时间: 2011-10-24
运行10分钟,内存增量极其有限……Hwnd1 = FindWindow(vbNullString, "Form1")
作者: yiguangqiang88 发布时间: 2011-10-24
谢谢yiguangqiang88能花时间来测试,这是个期货外挂,读内存那句是ReadProcessMemory pHandle, ByVal GetProcModuleHandle(PID, "GlobalData.dll") + &H1B810, RBprice, 4, 0& '读出最新价
问题会不会是出在GetProcModuleHandle(PID, "GlobalData.dll")上面?但别人这个地方是能用不吃内存的。
问题会不会是出在GetProcModuleHandle(PID, "GlobalData.dll")上面?但别人这个地方是能用不吃内存的。
作者: sys668 发布时间: 2011-10-24
以下是模块里的代码,这个模块是为了读取GlobalData.dll内存而写的,是不是这里出了问题
Public Function GetProcModuleHandle(PID As Long, Module As String) As Long
Dim hMSnapshot As Long
Dim strTreTxt As String
Dim lngRet As Long
Dim MEY As MODULEENTRY32
MEY.dwSize = Len(MEY)
hMSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPmodule, PID) '快照当前进程模块
MEY.szExePath = Space$(256)
lngRet = Module32First(hMSnapshot, MEY)
'内循环读取模块名
Do While lngRet > 0
If InStr(1, MEY.szModule, Module, vbTextCompare) > 0 Then
GetProcModuleHandle = MEY.hModule
Exit Function
End If
lngRet = Module32Next(hMSnapshot, MEY) '获取下一模块
Loop
Call CloseHandle(hMSnapshot) '关闭模块快照句柄
Exit Function
End Function
Public Function GetProcModuleHandle(PID As Long, Module As String) As Long
Dim hMSnapshot As Long
Dim strTreTxt As String
Dim lngRet As Long
Dim MEY As MODULEENTRY32
MEY.dwSize = Len(MEY)
hMSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPmodule, PID) '快照当前进程模块
MEY.szExePath = Space$(256)
lngRet = Module32First(hMSnapshot, MEY)
'内循环读取模块名
Do While lngRet > 0
If InStr(1, MEY.szModule, Module, vbTextCompare) > 0 Then
GetProcModuleHandle = MEY.hModule
Exit Function
End If
lngRet = Module32Next(hMSnapshot, MEY) '获取下一模块
Loop
Call CloseHandle(hMSnapshot) '关闭模块快照句柄
Exit Function
End Function
作者: sys668 发布时间: 2011-10-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28