小弟参考了 MSDN论坛不少关于ReadProcessMemory
读取值出来的观念和手法
也依样画葫芦自己照做了一次 但我发现这个API取值出来后的后段处理
有点搞不太懂
所以特来发文请教各位大大
首先这个API
我用了两种不同的宣告方法 :
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByVal pBuffer() As Byte, ByVal nSize As Integer,
ByRef lpNumberOfBytesWritten As Integer) As Integer
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer,
ByRef lpNumberOfBytesRead As Integer) As Integer
当然这两种宣告方法实际测试后是可以使用的 也是我寻找网络上的信息后汇整确认可以使用的
但是使用这两种不同的宣告
我试着要将他传出来的值转成浮点数
就发现了问题
1.
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByVal pBuffer() As Byte, ByVal nSize As Integer,
ByRef lpNumberOfBytesWritten As Integer) As Integer
Dim b(3) As Byte
ReadProcessMemory(hProcess, &HBD1A88, b, 4, bytesRead)
Me.Label2.Text = "监看数据int32:"
& BitConverter.ToInt32(b, 0)
Me.Label1.Text = "监看数据浮点数:"
& (BitConverter.ToSingle(b, 0))
label2跑出来的数据是
1132390609 lebel1跑出来的数据是 254.9094
这个没有问题是我要的数据
但是用第二个API重新宣告再测试一次
2.
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer,
ByRef lpNumberOfBytesRead As Integer) As Integer
Dim b As integer
ReadProcessMemory(hProcess, &HBD1A88, b, 4, bytesRead)
Me.Label2.Text = "监看数据int32"
& b
Me.Label1.Text = "监看数据浮点数:"
& CSng(b)
label2跑出来的数据是
1132390609 跟上面一样
但lebel1跑出来的数据却是1.132391E+09
为什么会这样呢?
明明都是转换成浮点数 为什么下面这种一样转成浮点数
为什么会变成这样呢?
我要lebel1的数据结果是跟上面那个浮点数的结果才是我要的
这里是哪里有问题呢? 该如何修改..