首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

ReadProcessMemory每次读取都是0,该怎么处理

2012-03-04 
ReadProcessMemory每次读取都是0哪位仁兄帮忙看看下面代码哪出问题,ReadProcessMemory每次读取都是0,用Get

ReadProcessMemory每次读取都是0
哪位仁兄帮忙看看下面代码哪出问题,ReadProcessMemory每次读取都是0,用GetLastError()每次都是显示299。
想做一个小游戏的修改器,读取的内存地址为0043E13C。
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) 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 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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Dim GameHwnd As Long
Private Const PROCESS_ALL_ACCESS = &H1F0FFF

Private Sub Timer1_Timer()
  GameHwnd = FindWindow(vbNullString, "ywne")
  Dim GamePid As Long, GPPid As Long, a As Long
  If GameHwnd > 0 Then
  GetWindowThreadProcessId GameHwnd, GamePid
  GPPid = OpenProcess(PROCESS_ALL_ACCESS, False, GamePid)
  ReadProcessMemory GPPid, &H43E13C, a, 4, 0&
  MsgBox GetLastError()
  CloseHandle GPPid
  Label1.Caption = Str(a)
  End If
End Sub


[解决办法]
等高人路过出手,帮顶。。。
[解决办法]

VB code
Option ExplicitPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As LongPrivate Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId 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 LongPrivate Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Declare Function GetLastError Lib "kernel32" () As LongDim GameHwnd As LongPrivate Const PROCESS_ALL_ACCESS = &H1F0FFF'修改API声明Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long _, lpBaseAddress As Any _, lpBuffer As Any _, ByVal nSize As Long _, lpNumberOfBytesWritten As Long _) As LongPrivate Sub Command1_Click()    GameHwnd = FindWindow(vbNullString, "Form1")    Dim GamePid As Long, GPPid As LongDim a(100) As Byte  '修改接收变量的类型    If GameHwnd > 0 Then      GetWindowThreadProcessId GameHwnd, GamePid      GPPid = OpenProcess(PROCESS_ALL_ACCESS, False, GamePid)    Dim i As Long     i = ReadProcessMemory(GPPid, ByVal &H43E13C, a(0), 100, 0&)          CloseHandle GPPid            Label1.Caption = StrConv(a, vbUnicode)    End IfEnd Sub
[解决办法]
1.修改了API声明.
VB code
'修改API声明Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long _, lpBaseAddress As Any _, lpBuffer As Any _, ByVal nSize As Long _, lpNumberOfBytesWritten As Long _) As Long 

热点排行