Forums Neueste Beiträge
 

Sendmessage zwischen zwei Anwendungen

25/05/2009 - 09:08 von Stefan Simon | Report spam
Hallo,

ich habe 2 Anwendungen, die Daten über Sendmessages austauschen. Ich habe
das früher in 2 VB.Net-Anwendungen schon erfolgreich eingesetzt. Jetzt habe
ich zwei neue Anwenungen in C# entwickelt und den Code aus den VB.Net
Anwendungen übersetzt. Aber die zweite Anwendung empfàngt die Nachrichten
nicht. Was könnte ich bei der Übersetzung falsch gemacht haben? Hier mein C#
Code:

\\\
#region API
[StructLayout(LayoutKind.Sequential)]
public struct TParam
{
public IntPtr dwData;
public Int32 cbData;
public IntPtr lpData;
}

[DllImport("user32.dll")]
public static extern Int32 SendMessage(
IntPtr hWnd, // handle to destination window
Int32 Msg, // message
IntPtr wParam, // first message parameter
TParam lParam // second message parameter
);
#endregion

const Int32 WM_SENDMESSAGE = 0x4A;

private IntPtr HWND_Sender; // [andere Anwendung].Handle

protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_SENDMESSAGE)
{
string s = GetMessage((TParam)m.GetLParam(typeof(TParam)));
MessageHandler(s);
}
else
{
base.WndProc(ref m);
}
}

private string GetMessage(TParam Data)
{
string result = string.Empty;
try
{
result = Marshal.PtrToStringAuto(Data.lpData, Data.cbData /
Marshal.SystemDefaultCharSize);
}
catch (Exception ex)
{
}
return result;
}

private void SendMessage(IntPtr Target, string Message)
{
if ((!Target.Equals(IntPtr.Zero)) & (Message != string.Empty))
{
TParam data = new TParam();
data.lpData = Marshal.StringToHGlobalAuto(Message);
data.cbData = Message.Length *
Marshal.SystemDefaultCharSize;
SendMessage(Target, WM_SENDMESSAGE, this.Handle, data);
Marshal.FreeHGlobal(data.lpData);
}
}
///

tia
Stefan
 

Lesen sie die antworten

#1 Stefan Simon
25/05/2009 - 09:40 | Warnen spam
[DllImport("user32.dll")]
public static extern Int32 SendMessage(
IntPtr hWnd, // handle to destination window
Int32 Msg, // message
IntPtr wParam, // first message parameter
//TParam lParam // second message parameter
ref TParam lParam // second message parameter
);

OK, hier fehlte schonmal ein ref, aber das wars noch nicht.

Stefan

Ähnliche fragen