我有两个应用程序,我需要发送"短信"它们之间。我试过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
?
谢谢!
答案 0 :(得分:0)
这看起来像XY Problem。
实现进程间通信的更好方法是使用net sockets,稍后可以将其移植到允许远程进程间通信。您基本上是在一个应用程序上侦听特定端口,并从另一个应用程序连接到该端口,就好像它是Internet上的远程主机一样。
实现进程间通信的另一种方法是使用Anonymous Pipes,这是IPC的一种Windows机制。
通常,您可以查看许多不同的IPC方法here。
不建议在此问题上使用Windows Messages,因为这不是他们的意思。 WM为OS提供了能够向(通常)UI交互通知Windowed应用程序,即使任何应用程序都可以将WM发送到另一个应用程序。你有更好的选择。
答案 1 :(得分:-1)
RegisterWindowMessage遍历消息队列。这不是你想要做的事情。
查看OLE。这是受制裁的路线。