Csdn注册很久了,这里让我学到了很多东西,也经常看到各位大侠的点评,给了我很多帮助
现在有一个API一直困扰着我
ReadProcessMemory
vb6.0定义为
Public Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
小弟在vb6里测试切通过
但现在转到vb.net 问题出现了,小弟在是这样定义的
Public Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByVal lpBuffer As Integer, ByVal nSize As Integer, ByVal lpNumberOfBytesWritten As Integer) As Integer
如
hwnd=findwindow(vbnullstring,"无标题 - 记事本")
pid=getwindowthreadprocess(hwnd,pid)
openprocess(process_all_access,false,pid)
Hprocess 这里比方说我用上面的内容得到它的值,hprocess=1380(肯定能得到的,但内容我就不写,就是这个意思)
dim 子弹 as integer
dim base as integer
Readprocessmemory(Hprocess,&H12345678,base,4,0) 这句是把&H12345678的值赋给base
关键在于下面的了
Readprocessmemory(hprocess,base + &H70,base,4,0)这句是把第一句base得到的值+偏移70
Readprocessmemory(hprocess,base + &H68,子弹,4,0)这句是把第一句base得到的值+偏移68
textbox1.text=子弹
这样得出的结果是0
但同样的写法,在vb6里就可以实现,可以得到值,我想问下家在vb.net里用过这个api 、
是不是我定义的有问题,请大家指教,另外看了一篇文章,也是关于这个问题的,说把lpBuffer As Integer改成
lpbuffer() as bytre
应用到我上面的代码时,如那位朋友所写 dim buff(20) as byte
readprocessmemory(hprocess,&H12345678,buff,4,0)
readprocessmemory(hprocess,buff + &H70,buff,4,0)这样就会出错了,buff + &H70这句提示byte的1维数组与integer值无法相加
望高手指点~