小弟我想读取一个程序的内存,但是如何告诉VB,是哪个程序,具体代码如何写?多谢
我想读取一个程序的内存,但是怎么告诉VB,是哪个程序,具体代码怎么写?谢谢
本人新手,如果答案是要用API的话,请把声明部分也写出来吧,我对API的声明还不太熟练!谢谢大家了!
------解决方案--------------------
http://www.google.cn/search?complete=1&hl=zh-CN&q=declare+ReadProcessMemory&meta=
有很多很多的例子
------解决方案--------------------
Private Declare Function GlobalLock Lib "kernel32 " (ByVal hMem As Long) As Long
Private Declare Function GlobalSize Lib "kernel32 " (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32 " (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32 " Alias "RtlMoveMemory " (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Private Declare Function GlobalAlloc Lib "kernel32 " (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalFree Lib "kernel32 " (ByVal hMem As Long) As Long
Private mMyData() As Byte
Private mMyDataSize As Long
Private mHmem As Long
Public Enum enGlobalmemoryAllocationConstants
GMEM_FIXED = &;amp;H0
GMEM_DISCARDABLE = &;amp;H100
GMEM_MOVEABLE = &;amp;H2
GMEM_NOCOMPACT = &;amp;H10
GMEM_NODISCARD = &;amp;H20
GMEM_ZEROINIT = &;amp;H40
End Enum
Public Sub CopyFromHandle(ByVal hMemHandle As Long)
Dim lRet As Long
Dim lPtr As Long
lRet = GlobalSize(hMemHandle)
If lRet > 0 Then
mMyDataSize = lRet
lPtr = GlobalLock(hMemHandle)
If lPtr > 0 Then
ReDim mMyData(0 To mMyDataSize - 1) As Byte
CopyMemory mMyData(0), ByVal lPtr, mMyDataSize
Call GlobalUnlock(hMemHandle)
End If
End If
End Sub
'\\ --[CopyToHandle]--------------------
' ---------
'\\ Copies the private data to a memory
' handle
'\\ passed in
'\\ ------------------------------------
' ---------
Public Sub CopyToHandle(ByVal hMemHandle As Long)
Dim lSize As Long
Dim lPtr As Long
'\\ Don 't copy if its empty
If Not (mMyDataSize = 0) Then
lSize = GlobalSize(hMemHandle)
'\\ Don 't attempt to copy if zero size..
' .
If lSize > 0 Then
If lPtr > 0 Then
CopyMemory ByVal lPtr, mMyData(0), lSize
Call GlobalUnlock(hMemHandle)
End If
End If
End If
End Sub
是上面這個嗎?在planet-source-code.com上有
//**************************************
//
//Windows API/Global Declarations for :P
// ossible sharable VB memory
//**************************************
//
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
Declare Function WriteProcessMemory Lib "kernel32 " Alias "WriteProcessMemory " (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Declare Function GetCurrentProcessId Lib "kernel32 " Alias "GetCurrentProcessId " () As Long
Declare Function OpenProcess Lib "kernel32 " (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public const SPECIFIC_RIGHTS_ALL =&;amp;H0000FFFF
Public const STANDARD_RIGHTS_REQUIRED = &;amp;H000F0000
Public const STANDARD_RIGHTS_ALL = &;amp;H001F0000
本人新手,如果答案是要用API的话,请把声明部分也写出来吧,我对API的声明还不太熟练!谢谢大家了!
------解决方案--------------------
http://www.google.cn/search?complete=1&hl=zh-CN&q=declare+ReadProcessMemory&meta=
有很多很多的例子
------解决方案--------------------
Private Declare Function GlobalLock Lib "kernel32 " (ByVal hMem As Long) As Long
Private Declare Function GlobalSize Lib "kernel32 " (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32 " (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32 " Alias "RtlMoveMemory " (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Private Declare Function GlobalAlloc Lib "kernel32 " (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalFree Lib "kernel32 " (ByVal hMem As Long) As Long
Private mMyData() As Byte
Private mMyDataSize As Long
Private mHmem As Long
Public Enum enGlobalmemoryAllocationConstants
GMEM_FIXED = &;amp;H0
GMEM_DISCARDABLE = &;amp;H100
GMEM_MOVEABLE = &;amp;H2
GMEM_NOCOMPACT = &;amp;H10
GMEM_NODISCARD = &;amp;H20
GMEM_ZEROINIT = &;amp;H40
End Enum
Public Sub CopyFromHandle(ByVal hMemHandle As Long)
Dim lRet As Long
Dim lPtr As Long
lRet = GlobalSize(hMemHandle)
If lRet > 0 Then
mMyDataSize = lRet
lPtr = GlobalLock(hMemHandle)
If lPtr > 0 Then
ReDim mMyData(0 To mMyDataSize - 1) As Byte
CopyMemory mMyData(0), ByVal lPtr, mMyDataSize
Call GlobalUnlock(hMemHandle)
End If
End If
End Sub
'\\ --[CopyToHandle]--------------------
' ---------
'\\ Copies the private data to a memory
' handle
'\\ passed in
'\\ ------------------------------------
' ---------
Public Sub CopyToHandle(ByVal hMemHandle As Long)
Dim lSize As Long
Dim lPtr As Long
'\\ Don 't copy if its empty
If Not (mMyDataSize = 0) Then
lSize = GlobalSize(hMemHandle)
'\\ Don 't attempt to copy if zero size..
' .
If lSize > 0 Then
If lPtr > 0 Then
CopyMemory ByVal lPtr, mMyData(0), lSize
Call GlobalUnlock(hMemHandle)
End If
End If
End If
End Sub
是上面這個嗎?在planet-source-code.com上有
//**************************************
//
//Windows API/Global Declarations for :P
// ossible sharable VB memory
//**************************************
//
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
Declare Function WriteProcessMemory Lib "kernel32 " Alias "WriteProcessMemory " (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Declare Function GetCurrentProcessId Lib "kernel32 " Alias "GetCurrentProcessId " () As Long
Declare Function OpenProcess Lib "kernel32 " (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public const SPECIFIC_RIGHTS_ALL =&;amp;H0000FFFF
Public const STANDARD_RIGHTS_REQUIRED = &;amp;H000F0000
Public const STANDARD_RIGHTS_ALL = &;amp;H001F0000