1

我一直在尝试使用 .NET Windows Forms 应用程序从两个应用程序发送消息WM_COPYDATA,并且效果很好。

我想知道这是否可以通过控制台应用程序来完成。

在所有SendMessage函数都接受一个窗口句柄之后,我怎样才能获得控制台应用程序的窗口句柄?

[DllImport("User32.dll")]
public static extern Int32 SendMessage(int hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam);

我还需要在控制台应用程序中设置某种消息循环才能接收消息吗?

4

2 回答 2

4

最常见的IPC方法(除了WM_COPYDATA)是内存映射文件和命名管道。我建议你看看后者。

MSDN 有一个命名管道通信的例子。具体来说,您需要使用的类是NamedPipeServerStreamNamedPipeClientStream,它们在创建后的行为与普通网络流非常相似。

好消息是它也可以在网络上工作,尽管您显然也可以在单台机器上使用它。

至少可以说,在控制台应用程序中设置实际的 Windows 消息循环很复杂。如果你真的需要这样做,这里有一篇关于这个主题的冗长的文章。如果您只想传输数据,我强烈建议您使用命名管道;如果您实际上不需要处理标准 Windows 消息,那么这将不值得付出努力。

于 2010-03-04T01:12:33.280 回答
2

@tommieb75:XDMessaging 实际上是我的库 :) WM_COPYDATA 不适用于控制台应用程序,因为它们没有消息泵。然而,该库确实包含一个基于 IOStream 的 IPC 实现,适用于控制台应用程序和服务。http://thecodeking.github.com/XDMessaging.Net/

于 2010-03-25T13:24:22.263 回答