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

关于VB.net 2005调用API(ReadProrocessMemory)的有关问题

2012-02-19 
关于VB.net 2005调用API(ReadProrocessMemory)的问题PublicClassMemoryClassPublicSharedhprocessAsIntege

关于VB.net 2005调用API(ReadProrocessMemory)的问题
Public   Class   MemoryClass
        Public   Shared   hprocess   As   Integer
        Public   Shared   buffer   As   Byte
        Private   Shared   lpNumberOfBytesWritten   As   Integer   =   0
        Public   Const   PROCESS_ALL_ACCESS   =   &H10
        Public   Declare   Function   CloseHandle   Lib   "kernel32.dll "   (ByVal   hProcess   As   Integer)   As   Integer
        <DllImport( "kernel32.dll ",   SetLasterror:=True,   CharSet:=CharSet.Auto,   ExactSpelling:=True,   CallingConvention:=CallingConvention.StdCall)>   _
        Public   Shared   Function   ReadProcessMemory(ByVal   hProcess   As   Integer,   ByVal   lpBaseAddress   As   Integer,   ByVal   lpBuffer   As   Byte,   ByVal   nSize   As   Integer,   ByRef   lpNumberOfBytesWritten   As   Integer)   As   Integer
        End   Function
        <DllImport( "kernel32.dll ",   CharSet:=CharSet.Auto,   Setlasterror:=True)>   _
        Public   Shared   Function   OpenProcess(ByVal   dwDesiredAccess   As   Integer,   ByVal   bInheritHandle   As   Boolean,   ByVal   dwProcessId   As   Integer)   As   Integer
        End   Function

        Public   Shared   Sub   Init()
                Dim   ps   As   Process()   =   Process.GetProcessesByName( "elementclient ")
                If   (ps.Length   =   0)   Then
                        MsgBox( "未打开! ")
                End   If
                Dim   pid   As   Process   =   ps(0)
                hprocess   =   OpenProcess(&H10,   True,   pid.Id)
        End   Sub
        Public   Shared   Sub   Dispose()
                If   (hprocess   >   0)   Then
                        CloseHandle(hprocess)
                End   If
        End   Sub
        Public   Shared   Function   ReadInt(ByVal   address   As   Integer,   ByVal   length   As   Integer)   As   Integer
                If   (length   >   4)   Then
                        length   =   4
                End   If
                If   (length   <   1)   Then
                        length   =   4


                End   If
                buffer   =   4
                Dim   r   As   Integer   =   ReadProcessMemory(hprocess,   address,   buffer,   length,   lpNumberOfBytesWritten)
                If   (r   =   0)   Then
                        MsgBox( "读取内存错误! ")
                End   If
                r   =   0
                Dim   i   As   Integer   =   0
                Do   While   i   <   length
                        r   +=   buffer   *   MemoryClass.ComputeExp(256,   i)
                        i   =   i   +   1
                Loop
                Return   r
        End   Function
        Private   Shared   Function   ComputeExp(ByVal   i   As   Integer,   ByVal   j   As   Integer)
                Dim   r   As   Integer   =   1
                Dim   o   As   Integer   =   0
                Do   While   o   <   j
                        r   *=   i
                        o   =   o   +   1
                Loop
                Return   r
        End   Function
End   Class
我在Dim   r   As   Integer   =   ReadProcessMemory(hprocess,   address,   buffer,   length,   lpNumberOfBytesWritten)设了断点.里面的参数都可以的到数值.
不知道怎么了,弄了一天没弄好.郁闷啊.各位大大帮帮忙


[解决办法]
你的buffer就一个byte

热点排行