VB.net中读取内存数据问题,不会整。(等会就回来看)

urf 2004-05-10 03:51:48
我正在做一个读取游戏内存数据的程序,不是修改器。只是监视固定内存地址的数据,如0101CE81的一个位置的浮点数据,定期读取这个位置的数据进行监视。

但是我看了一些文章好像都是vb6的,里面有些语句不太兼容。我自己写的老是抓不到进程句柄(游戏已运行)。

请问在VB.net里应该具体怎么写?或者有什么其它更简单的方法实现?
程序思路:点“开始监视按钮”触发验证游戏是否已经运行并抓到句柄,可开始读内存,然后触发timer,定期读取指定地址的数据并显示在text控件里。
...全文
260 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
urf 2004-05-11
  • 打赏
  • 举报
回复
怎么还没解决啊?我是初学者能不能说详细点。
urf 2004-05-10
  • 打赏
  • 举报
回复
好像没有理解我的意思(!-_-)
我现在知道这些代码,就是发现有些在.net里不兼容,而且老是抓不到进程句柄。
我的代码:
声明:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, ByVal lpdwProcessId As Long) As Long
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As String, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As String, ByVal lpBuffer As String, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long
Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As String, ByVal lpBuffer As String, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Dim hWnd, pid, pHandle As Long

代码(用写字板测试):
hWnd = FindWindow(vbNullString, "写字板")
If hWnd = 0 Then
MsgBox("你还没打开写字板?")
Exit Sub
End If
GetWindowThreadProcessId(hWnd, pid)
pHandle = OpenProcess("PROCESS_ALL_ACCESS", False, pid)
If (pHandle = 0) Then
MsgBox("得不到进程句柄!")
Exit Sub
End If

每次都抓不到句柄,前面的声明有些地方被我改了,因为在.net里不能用。
谁能提供能抓到进程句柄的.net里的代码?
lxcc 2004-05-10
  • 打赏
  • 举报
回复
vb.net访问内存还不如vb6(个人感觉!)
Montaque 2004-05-10
  • 打赏
  • 举报
回复
。net 一般是不允许你直接读内存中的数据,这样不安全。
度的话必须掉api
liutian32 2004-05-10
  • 打赏
  • 举报
回复
可使用API函数FindWindow来查找指定进程是否在运行,如果找到指定进程,这个函数返回的就是进程句柄。你所说的读内存应该指的是共享内存吧,也必须使用API函数来实现,具体的实现要用到下面函数:

Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As Long, lpFileMappigAttributes As SECURITY_ATTRIBUTES, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As Long, ByVal lpname As String) As Long
Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long
Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile As Long) As Long
Declare Function MapViewOfFile Lib "kernel32" (ByVal hFileMappingObject As Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long) As Long
Declare Function UnmapViewOfFile Lib "kernel32" (ByVal lpBaseAddress As Long) As Long
Declare Function OpenFileMapping Lib "kernel32" Alias "OpenFileMappingA" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpname As String) As Long

共享内存的读写可能要使用MoveMemory函数。以上函数的声明是VB6的,在.net下要做相应的转换。

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧