Ok, hier das versprochene (einfache) Beispiel:
App1 (Sender):
'//
'// Programmname:
'// SendMessageTest_App1
'//
Option Explicit On
Option Strict On
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Vom Windows Form Designer generierter Code "
Public Sub New()
MyBase.New()
' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
InitializeComponent()
' Initialisierungen nach dem Aufruf InitializeComponent() hinzufügen
End Sub
' Die Form überschreibt den Löschvorgang der Basisklasse, um Komponenten zu
' bereinigen.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
' Für Windows Form-Designer erforderlich
Private components As System.ComponentModel.IContainer
'HINWEIS: Die folgende Prozedur ist für den Windows Form-Designer
' erforderlich
'Sie kann mit dem Windows Form-Designer modifiziert werden.
'Verwenden Sie nicht den Code-Editor zur Bearbeitung.
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents Button1 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.Label2 = New System.Windows.Forms.Label
Me.Button1 = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(8, 40)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(272, 20)
Me.TextBox1.TabIndex = 4
Me.TextBox1.Text = ""
'
'Label2
'
Me.Label2.Location = New System.Drawing.Point(8, 16)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(224, 24)
Me.Label2.TabIndex = 5
Me.Label2.Text = "Message"
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(8, 72)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(272, 24)
Me.Button1.TabIndex = 6
Me.Button1.Text = "Sende"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(288, 101)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.TextBox1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.TopMost = True
Me.ResumeLayout(False)
End Sub
#End Region
'Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
' ByVal
' hwnd As Int32, _
' ByVal
' wMsg As Int32, _
' ByVal
' wParam As Int32, _
' ByRef
' lParam As Object) As Int32
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByV_
al _
hwn_
d A_
s I_
nt3_
2, _
ByV_
al _
wMs_
g A_
s I_
nt3_
2, _
ByV_
al _
wPa_
ram _
As _
Int_
32, _
ByR_
ef _
lPa_
ram _
As _
COP_
YDA_
TAS_
TRU_
CT) _
As _
Int_
32
Public Structure COPYDATASTRUCT
Public dwData As IntPtr
Public cbData As Integer
Public lpData As String
End Structure
Private Const WM_COPYDATA As Integer = &H4A
Private Function FindOtherProcess() As IntPtr
Dim p() As Process = Process.GetProcessesByName("SendMessageTest_App2")
If p.Length < 1 Then Return New IntPtr(-1)
Return p(0).MainWindowHandle
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
Dim h As IntPtr = FindOtherProcess()
Dim data As COPYDATASTRUCT
If h.ToInt32 = -1 Then
MessageBox.Show("Konnte SendMessageTest_App2 nicht finden..")
Return
End If
Dim msg As String = Me.TextBox1.Text
data.dwData = New IntPtr(0)
data.lpData = msg + Chr(0)
data.cbData = msg.Length
SendMessage(h.ToInt32, WM_COPYDATA, 0, data)
End Sub
End Class App2 (Empfänger):
'//
'// Programmname:
'// SendMessageTest_App2
'//
Option Explicit On
Option Strict On
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Vom Windows Form Designer generierter Code "
Public Sub New()
MyBase.New()
' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
InitializeComponent()
' Initialisierungen nach dem Aufruf InitializeComponent() hinzufügen
End Sub
' Die Form überschreibt den Löschvorgang der Basisklasse, um Komponenten zu
' bereinigen.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
' Für Windows Form-Designer erforderlich
Private components As System.ComponentModel.IContainer
'HINWEIS: Die folgende Prozedur ist für den Windows Form-Designer
' erforderlich
'Sie kann mit dem Windows Form-Designer modifiziert werden.
'Verwenden Sie nicht den Code-Editor zur Bearbeitung.
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Label2 = New System.Windows.Forms.Label
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.SuspendLayout()
'
'Label2
'
Me.Label2.Location = New System.Drawing.Point(8, 16)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(224, 24)
Me.Label2.TabIndex = 9
Me.Label2.Text = "Message"
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(8, 40)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(272, 20)
Me.TextBox1.TabIndex = 10
Me.TextBox1.Text = " "
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(296, 69)
Me.Controls.Add(Me.TextBox1)
Me.Controls.Add(Me.Label2)
Me.Name = "Form1"
Me.Text = "Form1"
Me.TopMost = True
Me.ResumeLayout(False)
End Sub
#End Region
Public Structure COPYDATASTRUCT
Public dwData As IntPtr
Public cbData As Integer
Public lpData As String
End Structure
Private Const WM_COPYDATA As Integer = &H4A
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_COPYDATA Then
Dim data As COPYDATASTRUCT
data = CType(m.GetLParam(data.GetType), COPYDATASTRUCT)
Me.TextBox1.Text = data.lpData.Substring(0, data.cbData)
End If
MyBase.WndProc(m)
End Sub
End Class Am besten wäre es, du erstellst hierfür zwei Projekte.  |