如何将字符串发送到另一个窗口?

时间:2015-05-13 16:39:28

标签: c# winforms pinvoke

我有两个应用程序,我需要发送"短信"它们之间。我试过PostMessage,但我只能发送数字。我使用lParam来传递消息,如果我将其更改为string,我仍然只能得到数字。甚至可以发送字符串,如果是的话,怎么样?

以下代码:

public const int HWND_BROADCAST = 0xffff;
public static readonly int WM_TEST = RegisterWindowMessage("WM_TEST");

[DllImport("user32")]
public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);

[DllImport("user32")]
public static extern int RegisterWindowMessage(string message);

发送消息的代码:

int message = 1234567890;
PostMessage((IntPtr)HWND_BROADCAST, WM_TEST, IntPtr.Zero, (IntPtr)message);

并收到消息:

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_TEST)
    {
        textBox1.AppendText(m.LParam.ToString() + Environment.NewLine);
    }

    base.WndProc(ref m);
}

再次提出问题:如何在两个应用之间发送string

谢谢!

2 个答案:

答案 0 :(得分:0)

这看起来像XY Problem

实现进程间通信的更好方法是使用net sockets,稍后可以将其移植到允许远程进程间通信。您基本上是在一个应用程序上侦听特定端口,并从另一个应用程序连接到该端口,就好像它是Internet上的远程主机一样。

实现进程间通信的另一种方法是使用Anonymous Pipes,这是IPC的一种Windows机制。

通常,您可以查看许多不同的IPC方法here

不建议在此问题上使用Windows Messages,因为这不是他们的意思。 WM为OS提供了能够向(通常)UI交互通知Windowed应用程序,即使任何应用程序都可以将WM发送到另一个应用程序。你有更好的选择。

答案 1 :(得分:-1)

RegisterWindowMessage遍历消息队列。这不是你想要做的事情。

查看OLE。这是受制裁的路线。