关于vb.net 调用win32API Reamprocessmemory的问题

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值无法相加

 

 

望高手指点~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值