C# 向.NET控制台应用程序发送消息

C# 向.NET控制台应用程序发送消息,c#,.net,ipc,sendmessage,C#,.net,Ipc,Sendmessage,我一直在尝试使用WM_COPYDATA从两个.NET Windows窗体应用程序发送消息,效果非常好 我想知道这是否可以通过控制台应用程序实现 在SendMessage函数接受了所有窗口句柄之后,如何获取控制台应用程序的窗口句柄 [DllImport("User32.dll")] public static extern Int32 SendMessage(int hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] string

我一直在尝试使用WM_COPYDATA从两个.NET Windows窗体应用程序发送消息,效果非常好

我想知道这是否可以通过控制台应用程序实现

在SendMessage函数接受了所有窗口句柄之后,如何获取控制台应用程序的窗口句柄

[DllImport("User32.dll")]
public static extern Int32 SendMessage(int hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam);
我还需要在控制台应用程序中设置某种消息循环才能接收消息吗?

除了WM_COPYDATA之外,最常用的方法是内存映射文件和命名管道。我建议你看看后者

MSDN有一个。具体来说,您需要使用的类是NamedPipeServerStream和NamedPipeClientStream,它们在创建后的行为基本上与普通网络流类似

很好的一点是,它也可以在网络上工作,尽管您显然也可以在一台机器上使用它

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

除了WM_COPYDATA之外,最常用的方法是内存映射文件和命名管道。我建议你看看后者

MSDN有一个。具体来说,您需要使用的类是NamedPipeServerStream和NamedPipeClientStream,它们在创建后的行为基本上与普通网络流类似

很好的一点是,它也可以在网络上工作,尽管您显然也可以在一台机器上使用它


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

@tommieb75:XDMessaging实际上是我的库:WM_COPYDATA不适用于控制台应用程序,因为它们没有消息泵。不过,该库确实包含了一个基于IOStream的IPC实现,它适用于控制台应用程序和服务

@tommieb75:xdmessage实际上是我的库:WM_COPYDATA不适用于控制台应用程序,因为它们没有消息泵。不过,该库确实包含了一个基于IOStream的IPC实现,它适用于控制台应用程序和服务

是的,我听说过命名管道,但从未真正尝试过实现它们。感谢您提供了很好的资源链接。我听说过命名管道,但从未真正尝试过实现它们。感谢您提供的宝贵资源links@GX:在我回答的第一个链接中,有一个针对windows服务和控制台的更新版本的代码…@GX:在我回答的第一个链接中,有一个针对windows服务和控制台的更新版本的代码…这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。我在发帖时没有足够的代表添加评论。这并不能回答问题。若要评论或要求作者澄清,请在其帖子下方留下评论。我在发帖时没有足够的代表来添加评论。