+ -
当前位置:首页 → 问答吧 → VB外挂吃内存

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

作者: 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")上面?但别人这个地方是能用不吃内存的。

作者: 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

作者: sys668   发布时间: 2011-10-24