Danke, hab das Problem gelöst. Falls es einer auch machen möchte, mein Quellie:
'Private Declare Function FindWindow Lib "user32" Alias _
' "FindWindowA" (ByVal lpClassName As String, ByVal _
' lpWindowName As String) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias _
"RtlMoveMemory" (hpvDest As Any, hpvSource As Any, _
ByVal cbCopy 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 Declare Function CallWindowProc Lib "user32" Alias _
"CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal _
hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As _
Long, ByVal dwNewLong As Long) As Long
Private Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As Long
End Type
Const GWL_WNDPROC As Long = -4&
Const WM_COPYDATA As Long = &H4A
Dim PrevWndProc As Long
Public Sub Init(hwnd As Long)
PrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub Terminate(hwnd As Long)
Call SetWindowLong(hwnd, GWL_WNDPROC, PrevWndProc)
End Sub
Public Function SendData(HWnd2 As Long, ByVal WindowName As String, Data As _
String) As Boolean
Dim DesthWnd As Long, B(0 To 255) As Byte
Dim CD As COPYDATASTRUCT
If Data = "" Then Exit Function
DesthWnd = FindWindow(vbNullString, WindowName)
If DesthWnd = 0 Then
SendData = False
Else
CD.dwData = 1
Call CopyMemory(B(0), ByVal Data, Len(Data))
CD.cbData = Len(Data) + 1
CD.lpData = VarPtr(B(0))
Call SendMessage(DesthWnd, WM_COPYDATA, HWnd2, CD)
SendData = True
End If
End Function
Private Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam _
As Long, ByVal lParam As Long) As Long
If Msg = WM_COPYDATA Then
Dim aa As String, B(0 To 255) As Byte
Dim CD As COPYDATASTRUCT
Call CopyMemory(CD, ByVal lParam, Len(CD))
Select Case CD.dwData
Case 1
Call CopyMemory(B(0), ByVal CD.lpData, CD.cbData)
aa = StrConv(B, vbUnicode)
aa = Left$(aa, InStr(1, aa, Chr$(0)) - 1)
BefehlEmpfangen aa
End Select
End If
WindowProc = CallWindowProc(PrevWndProc, hwnd, Msg, wParam, lParam)
End Function |