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 =============================================================== Dim a As Long a = 'process id to open Dim b As Long b = OpenProcess((SPECIFIC_RIGHTS_ALL And STANDARD_RIGHTS_ALL), False, a) 'opens a process handle for memory access --- Dim a As Long Dim b As Long Dim c As Long Dim d As Boolean Dim e As Long Dim f As Long d = ReadProcessMemory(a, ByVal b, ByVal VarPtr(c), 4, e) <-- reads from a openprocess handle's memory address. d = WriteProcessMemory(a, ByVal b, c, 4, e) <-- writes instead of reads.
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
===============================================================
Dim a As Long
a = 'process id to open
Dim b As Long
b = OpenProcess((SPECIFIC_RIGHTS_ALL And STANDARD_RIGHTS_ALL), False, a)
'opens a process handle for memory access
---
Dim a As Long
Dim b As Long
Dim c As Long
Dim d As Boolean
Dim e As Long
Dim f As Long
d = ReadProcessMemory(a, ByVal b, ByVal VarPtr(c), 4, e) <-- reads from a openprocess handle's memory address.
d = WriteProcessMemory(a, ByVal b, c, 4, e) <-- writes instead of reads.
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这里为什么老是红字啊?提示"缺少表达式"