VB Code:
  1. Option Explicit
  2.  
  3. Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
  4. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  5. Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
  6. Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
  7. Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  8. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  9. Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
  10. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
  11.  
  12. Private Const PROCESS_VM_READ        As Long = &H10
  13.  
  14. Private Type mtypDataStruct
  15.     Pointer  As Long
  16.     Length   As Long
  17. End Type
  18.  
  19. Dim marBuffer()     As Byte
  20. Dim mudtStruct      As mtypDataStruct
  21.  
  22. Public Function ReadMemory(ByVal ProcessID As Long, ByVal Pointer As Long) As Byte()
  23. Dim lngProcessHWND      As Long
  24. Dim lngBytesRead        As Long
  25. Dim arBuffer()          As Byte
  26. Dim udtStruct           As mtypDataStruct
  27.     lngProcessHWND = OpenProcess(PROCESS_VM_READ, False, ProcessID)
  28.     If lngProcessHWND Then
  29.         Call ReadProcessMemory(lngProcessHWND, ByVal Pointer, ByVal VarPtr(udtStruct), LenB(udtStruct), lngBytesRead)
  30.         ReDim arBuffer(0 To udtStruct.Length - 1) As Byte
  31.         Call ReadProcessMemory(lngProcessHWND, ByVal udtStruct.Pointer, ByVal VarPtr(arBuffer(0)), udtStruct.Length, lngBytesRead)
  32.         Call CloseHandle(lngProcessHWND)
  33.         ReadMemory = arBuffer
  34.         CloseHandle lngProcessHWND
  35.     End If
  36. End Function
  37.  
  38. Public Function ReadMemoryFromHWND(ByVal hwnd As Long, ByVal MemAddr As Long) As Byte()
  39. Dim lngProcessID        As Long
  40.     GetWindowThreadProcessId hwnd, lngProcessID
  41.     ReadMemoryFromHWND = ReadMemory(lngProcessID, MemAddr)
  42. End Function
  43.  
  44. Public Function SendByteArray(ByVal hwnd As Long, ByVal ByteArray As String) As Long
  45. Dim lngRet      As Long
  46.     marBuffer = ByteArray
  47.     With mudtStruct
  48.         .Length = UBound(marBuffer) + 1
  49.         .Pointer = VarPtr(marBuffer(0))
  50.     End With
  51.     SendByteArray = SendMessage(hwnd, CUSTOM_MESSAGE, GetCurrentProcessId, mudtStruct)
  52.     Erase marBuffer
  53. End Function
  54.  
  55. Public Sub PostByteArray(ByVal hwnd As Long, ByVal ByteArray As String)
  56.     marBuffer = ByteArray
  57.     With mudtStruct
  58.         .Length = UBound(marBuffer) + 1
  59.         .Pointer = VarPtr(marBuffer(0))
  60.     End With
  61.     Call PostMessage(hwnd, CUSTOM_MESSAGE, GetCurrentProcessId, VarPtr(mudtStruct))
  62. End Sub
  63.  
  64. Public Function PtrObj(ByVal Pointer As Long) As Object
  65. Dim objObject   As Object
  66.     CopyMemory objObject, Pointer, 4&
  67.     Set PtrObj = objObject
  68.     CopyMemory objObject, 0&, 4&
  69. End Function
  70.  
  71. Public Sub KillProcess(ByVal ProcessName As String)
  72.     TerminateEXE ProcessName
  73. End Sub
Well using the above I read Byte arrays from different processes...I am sure that this can be modified slightly so return an object...will it work...??? Hmmmm dunno...give it a go

Woka