Hallo Reinhard,
mensch so richtig wirklich habsch die zeit nicht dazu ;/
Aber ich habe mich nun mal kurz der Sache angenommen!
Eine fertige Lösung kannsch dir nicht praesentieren. Aber ne Step by Step Anleitung 
Also
1: Form erstellen
2: Handle des ChatFenster ermitteln.
’ Das kannst du via den API’s
Private Declare Function WindowFromPoint Lib "user32" (ByVal \_
xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As \_
POINTAPI) As Long
Private Declare Function GetClassName Lib "user32" Alias \_
"GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName \_
As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetParent Lib "user32" \_
(ByVal hwnd As Long) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
'Eine Routine könnte wiefolgt ausschauen
Dim Result&, Handle&, Parent, P As POINTAPI, Buffer$, Class$
Result = GetCursorPos(P)
Handle = WindowFromPoint(P.x, P.y)
Parent = GetParent(Handle)
Class = Space$(128)
Result = GetClassName(Handle, Class, 128)
Class = LCase(Left$(Class, Result))
Somit kommst du an das Handle *zwinker*
Das war eigentlich der schwerste Teil 
Nun kommt das Gelbe im Ei *feix*
Das Stichwort heisst, auch wenn du es net hören magst „SubClassing“
Mal ganz kurz ein wenig Theorie. Ohja, ohne diese geht es garnicht 
Es kommen doch Daten an! Um sie darzustellen, sendet Windows intern eine Nachricht an das Fenster, alla „schreibe mal da den text hin“
Und genau das machen wir uns zu nutze.
Auf Deutsch, wir klinken uns mal in die Nachrichtenschleife ein 
Nun haben wir aber das Problem, das es ja mehr wie nur 1 Fenster gibt was offen ist ( Sichtbar oder nicht, spielt erstmal keine Rolle!) Auch bekommen gewisse Dienste Nachrichten und und und.
Was machen wir nun?
Ah nun macht es wieder Klick. Jede Nachricht die Windows schickt beinhalted das Handle des Fenster’s für das die Nachricht ist. Also fragen wir das auch ab 
Nun mal kurz zusammengefasst.
1: Wir klinken uns in die Nachrichtenschleife ein
2: Wir filtern, das nur die Nachrichten rel. sind die für den Chat sind, dabei bauen wir gleich noch ein Filter ein! Auch hier wollen wir nicht alle Nachrichten wissen. Was interessiert uns zum Bsp. wenn mit der Maus geclickt wurde oder wenn es den Focus enthaelt 
Wie macht man das nun ? Ich habe mal eine Klasse geschrieben, die ich mal rauskopiert habe. Die erledigt genau die ganzen Dinge 
du musst nur die Klasse initialisieren und dabei das Handle und die Nachricht angeben die du haben magst , mehr nicht 
'Modul MsgHookProc
Option Explicit
Private Const GWL\_WNDPROC = -4
Private Const MAX\_HASH = 257
Private Type typHook
hWnd As Long
MsgHookPtr As Long
ProcAddr As Long
WndProc As Long
uMsgCount As Long
uMsg(MAX\_HASH - 1) As Boolean
uMsgCol As Collection
End Type
Private Declare Function CallWindowProcA Lib "user32" ( \_
ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, \_
ByVal Msg As Long, ByVal wParam As Long, \_
ByVal lParam As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" \_
(dest As Any, source As Any, ByVal NumBytes As Long)
Private Declare Function SetWindowLongA Lib "user32" ( \_
ByVal hWnd As Long, ByVal nIndex As Long, \_
ByVal dwNewLong As Long) As Long
Private Const MAXHOOKS = 9
Private Initialized As Boolean
Private arrHook() As typHook
Private NrCol As Collection
Public Function DoHook(ByVal ObjPtr As Long, ByVal hWnd As Long, \_
uMsg As Variant) As Long
Dim i As Long
Dim j As Long
If Not Initialized Then
ReDim Preserve arrHook(1 To MAXHOOKS)
arrHook(1).WndProc = Addr2Long(AddressOf WndProc1)
arrHook(2).WndProc = Addr2Long(AddressOf WndProc2)
arrHook(3).WndProc = Addr2Long(AddressOf WndProc3)
arrHook(4).WndProc = Addr2Long(AddressOf WndProc4)
arrHook(5).WndProc = Addr2Long(AddressOf WndProc5)
arrHook(6).WndProc = Addr2Long(AddressOf WndProc6)
arrHook(7).WndProc = Addr2Long(AddressOf WndProc7)
arrHook(8).WndProc = Addr2Long(AddressOf WndProc8)
arrHook(9).WndProc = Addr2Long(AddressOf WndProc9)
Set NrCol = New Collection
Initialized = True
End If
For i = 1 To UBound(arrHook)
If arrHook(i).MsgHookPtr = 0 Then Exit For
Next i
If i \> UBound(arrHook) Then
ReDim Preserve arrHook(1 To 2 \* UBound(arrHook))
End If
If i \> MAXHOOKS Then
NrCol.Add i, "H" & hWnd
arrHook(i).WndProc = Addr2Long(AddressOf WndProcX)
End If
DoHook = i
arrHook(i).uMsgCount = UBound(uMsg) + 1
If arrHook(i).uMsgCount Then
Erase arrHook(i).uMsg
Set arrHook(i).uMsgCol = New Collection
For j = LBound(uMsg) To UBound(uMsg)
arrHook(i).uMsg(uMsg(j) Mod MAX\_HASH) = True
arrHook(i).uMsgCol.Add True, "H" & uMsg(j)
Next j
End If
arrHook(i).hWnd = hWnd
arrHook(i).MsgHookPtr = ObjPtr
arrHook(i).ProcAddr = \_
SetWindowLongA(hWnd, GWL\_WNDPROC, arrHook(i).WndProc)
End Function
Public Sub DoUnhook(ByVal Nr As Long)
If Nr Then
With arrHook(Nr)
SetWindowLongA .hWnd, GWL\_WNDPROC, .ProcAddr
.MsgHookPtr = 0
Erase .uMsg
Set .uMsgCol = Nothing
If Nr \> MAXHOOKS Then NrCol.Remove "H" & .hWnd
End With
End If
End Sub
Public Function WndProc(ByVal Nr As Long, ByVal hWnd As Long, \_
ByVal uMsg As Long, ByVal wParam As Long, \_
ByVal lParam As Long) As Long
Dim oMsgHook As MsgHook
Dim retVal As Long
Dim Ok As Boolean
With arrHook(Nr)
If .uMsgCount \> 0 Then
If .uMsg(uMsg Mod MAX\_HASH) Then
On Error Resume Next
Ok = .uMsgCol("H" & uMsg) And (Err = 0)
On Error GoTo 0
End If
Else
Ok = True
End If
If Ok Then
CopyMemory oMsgHook, .MsgHookPtr, 4
oMsgHook.RaiseBefore uMsg, wParam, lParam, retVal
If uMsg Then
retVal = CallWindowProcA(.ProcAddr, hWnd, uMsg, wParam, lParam)
oMsgHook.RaiseAfter uMsg, wParam, lParam
End If
CopyMemory oMsgHook, 0&, 4
Else
retVal = CallWindowProcA(.ProcAddr, hWnd, uMsg, wParam, lParam)
End If
End With
WndProc = retVal
End Function
Public Function WndProc1(ByVal hWnd As Long, ByVal uMsg As Long, \_
ByVal wParam As Long, ByVal lParam As Long) As Long
WndProc1 = WndProc(1, hWnd, uMsg, wParam, lParam)
End Function
Public Function WndProc2(ByVal hWnd As Long, ByVal uMsg As Long, \_
ByVal wParam As Long, ByVal lParam As Long) As Long
WndProc2 = WndProc(2, hWnd, uMsg, wParam, lParam)
End Function
Public Function WndProc3(ByVal hWnd As Long, ByVal uMsg As Long, \_
ByVal wParam As Long, ByVal lParam As Long) As Long
WndProc3 = WndProc(3, hWnd, uMsg, wParam, lParam)
End Function
Public Function WndProc4(ByVal hWnd As Long, ByVal uMsg As Long, \_
ByVal wParam As Long, ByVal lParam As Long) As Long
WndProc4 = WndProc(4, hWnd, uMsg, wParam, lParam)
End Function
Public Function WndProc5(ByVal hWnd As Long, ByVal uMsg As Long, \_
ByVal wParam As Long, ByVal lParam As Long) As Long
WndProc5 = WndProc(5, hWnd, uMsg, wParam, lParam)
End Function
Public Function WndProc6(ByVal hWnd As Long, ByVal uMsg As Long, \_
ByVal wParam As Long, ByVal lParam As Long) As Long
WndProc6 = WndProc(6, hWnd, uMsg, wParam, lParam)
End Function
Public Function WndProc7(ByVal hWnd As Long, ByVal uMsg As Long, \_
ByVal wParam As Long, ByVal lParam As Long) As Long
WndProc7 = WndProc(7, hWnd, uMsg, wParam, lParam)
End Function
Public Function WndProc8(ByVal hWnd As Long, ByVal uMsg As Long, \_
ByVal wParam As Long, ByVal lParam As Long) As Long
WndProc8 = WndProc(8, hWnd, uMsg, wParam, lParam)
End Function
Public Function WndProc9(ByVal hWnd As Long, ByVal uMsg As Long, \_
ByVal wParam As Long, ByVal lParam As Long) As Long
WndProc9 = WndProc(9, hWnd, uMsg, wParam, lParam)
End Function
Public Function WndProcX(ByVal hWnd As Long, ByVal uMsg As Long, \_
ByVal wParam As Long, ByVal lParam As Long) As Long
Dim Nr As Long
On Error Resume Next
Nr = NrCol("H" & hWnd)
On Error GoTo 0
If Nr Then WndProcX = WndProc(Nr, hWnd, uMsg, wParam, lParam)
End Function
Private Function Addr2Long(ByVal Addr As Long) As Long
Addr2Long = Addr
End Function
'Das Klassenmodul MsgHook
Option Explicit
Public Enum WM\_CONST
WM\_ACTIVATEAPP = &H1C
WM\_CAPTURECHANGED = &H215
WM\_CHANGECBCHAIN = &H30D
WM\_CHAR = &H102
WM\_CLOSE = &H10
WM\_COMMAND = &H111
WM\_COMPACTING = &H41
WM\_CONTEXTMENU = &H7B
WM\_COPYDATA = &H4A
WM\_CTLCOLORSCROLLBAR = &H137
WM\_DESTROY = &H2
WM\_DEVMODECHANGE = &H1B
WM\_DEVICECHANGE = &H219
WM\_DISPLAYCHANGE = &H7E
WM\_DRAWCLIPBOARD = &H308
WM\_DROPFILES = &H233
WM\_ENDSESSION = &H16
WM\_ENTERMENULOOP = &H211
WM\_ENTERSIZEMOVE = &H231
WM\_ERASEBKGND = &H14
WM\_EXITMENULOOP = &H212
WM\_EXITSIZEMOVE = &H232
WM\_FONTCHANGE = &H1D
WM\_GETMINMAXINFO = &H24
WM\_HOTKEY = &H312
WM\_HSCROLL = &H114
WM\_KEYDOWN = &H100
WM\_KEYUP = &H101
WM\_KILLFOCUS = &H8
WM\_LBUTTONDBLCLK = &H203
WM\_LBUTTONDOWN = &H201
WM\_LBUTTONUP = &H202
WM\_MBUTTONDBLCLK = &H209
WM\_MBUTTONDOWN = &H207
WM\_MBUTTONUP = &H208
WM\_MENUCHAR = &H120
WM\_MENUSELECT = &H11F
WM\_MOUSEACTIVATE = &H21
WM\_MOUSEMOVE = &H200
WM\_MOUSEWHEEL = &H20A
WM\_MOVE = &H3
WM\_MOVING = &H216
WM\_NCACTIVATE = &H86
WM\_NCHITTEST = &H84
WM\_NCLBUTTONDBLCLK = &HA3
WM\_NCLBUTTONDOWN = &HA1
WM\_NCLBUTTONUP = &HA2
WM\_NCMBUTTONDBLCLK = &HA9
WM\_NCMBUTTONDOWN = &HA7
WM\_NCMBUTTONUP = &HA8
WM\_NCMOUSEMOVE = &HA0
WM\_NCPAINT = &H85
WM\_NCRBUTTONDBLCLK = &HA6
WM\_NCRBUTTONDOWN = &HA4
WM\_NCRBUTTONUP = &HA5
WM\_NOTIFY = &H4E
WM\_OTHERWINDOWCREATED = &H42
WM\_OTHERWINDOWDESTROYED = &H43
WM\_PAINT = &HF
WM\_PALETTECHANGED = &H311
WM\_PALETTEISCHANGING = &H310
WM\_POWER = &H48
WM\_POWERBROADCAST = &H218
WM\_QUERYENDSESSION = &H11
WM\_QUERYNEWPALETTE = &H30F
WM\_QUERYOPEN = &H13
WM\_RBUTTONDBLCLK = &H206
WM\_RBUTTONDOWN = &H204
WM\_RBUTTONUP = &H205
WM\_SETCURSOR = &H20
WM\_SETFOCUS = &H7
WM\_SETTINGCHANGE = &H1A
WM\_SIZE = &H5
WM\_SIZING = &H214
WM\_SPOOLERSTATUS = &H2A
WM\_SYSCOLORCHANGE = &H15
WM\_SYSCOMMAND = &H112
WM\_SYSKEYDOWN = &H104
WM\_SYSKEYUP = &H105
WM\_TIMECHANGE = &H1E
WM\_USERCHANGED = &H54
WM\_VSCROLL = &H115
WM\_WININICHANGE = &H1A
End Enum
Public Event After(ByRef uMsg As Long, ByRef wParam As Long, \_
ByRef lParam As Long)
Public Event Before(ByRef uMsg As Long, ByRef wParam As Long, \_
ByRef lParam As Long, ByRef retVal As Long)
Private Nr As Long
Public Sub Hook(ByVal hWnd As Long, ParamArray uMsg() As Variant)
Dim i As Long
Dim v As Variant
If Nr Then DoUnhook Nr
v = uMsg
Nr = DoHook(ObjPtr(Me), hWnd, v)
End Sub
Public Sub RaiseAfter(ByRef uMsg As Long, \_
ByRef wParam As Long, ByRef lParam As Long)
RaiseEvent After(uMsg, wParam, lParam)
End Sub
Public Sub RaiseBefore(ByRef uMsg As Long, \_
ByRef wParam As Long, ByRef lParam As Long, ByRef retVal As Long)
RaiseEvent Before(uMsg, wParam, lParam, retVal)
End Sub
Public Sub Unhook()
DoUnhook Nr
Nr = 0
End Sub
Private Sub Class\_Terminate()
If Nr Then DoUnhook Nr
End Sub
Das sind eigentlich alle relevanten Sachen!
Wie du siehst sind in dem Klassenmodul schon einige wichtige Nachrichten definiert! Alternativ muesstest du mal googeln, welchen Wert die Nachricht hat, die du brauchst, oder du schreibst schnell nen neues Subclassing, wo du dir alle Nachrichten anzeigen laesst 
Du kannst ohne probleme dort noch welche hinzufügen 
Somit haetten wir den „Lauscher“ *zwinker*
Das schreiben ansich geht auch schnell
Das Handle weisst du! Nun ermittle das Handle von der Textbox!
Bastel deine Nachricht zusammen. Activiere den Chat und dort die Textzeile. Sende den Text dorthin gefolgt von einem Enter und volla Text sollte dastehen. Alternativ get glaube auch die API SendMessage mit WM_SetTEXT 
Aber mir faellt gerade ein. Mit Sendmessage kannst du auch Texte auslesen, via dem Commanda WM_GETTEXT.
Hast du das schon einmal probiert?
MfG Alex