Option Explicit
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, ByRef lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, ByRef lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
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
Private Const WM_USER = &H400
Private Const EM_STREAMIN = (WM_USER + 73)
Private Const EM_STREAMOUT = (WM_USER + 74)
Private Const SF_TEXT = &H1
Private Const SF_RTF = &H2
Private Const SF_UNICODE = &H10 ' Unicode data of some kind
Private Const PROCESS_VM_OPERATION As Long = &H8
Private Const PROCESS_VM_READ As Long = &H10
Private Const PROCESS_VM_WRITE As Long = &H20
Private Const MEM_COMMIT As Long = &H1000
Private Const MEM_RELEASE As Long = &H8000&
Private Const PAGE_READWRITE As Long = &H4
Private Type EDITSTREAM
dwCookie As Long
dwError As Long
pfnCallback As Long
End Type
Private Sub Command1_Click()
Dim es As EDITSTREAM
Dim pStreamMemory As Long
Dim ProcessID As Long
Dim phandle As Long
hwnd= 'Write here the hwnd or use FindWindowEx api to locate the richtextbox
GetWindowThreadProcessId hwnd, ProcessID
phandle = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, ProcessID)
pStreamMemory = VirtualAllocEx(phandle, 0, 12, MEM_COMMIT, PAGE_READWRITE)
If pStreamMemory = 0 Then Stop
es.dwCookie = 55 'put your own data in here, it is passed to the callback function
es.pfnCallback = GetAddress(AddressOf EditStreamCallback)
Call WriteProcessMemory(phandle, pStreamMemory, es, 12, 0)
call SendMessage(hwnd, EM_STREAMOUT, SF_RTF, byval pStreamMemory)
Call VirtualFreeEx(phandle, pStreamMemory, 12, MEM_RELEASE)
Call CloseHandle(phandle)
End Sub