SendMessage 到 .NET 控制台应用程序

Posted

技术标签:

【中文标题】SendMessage 到 .NET 控制台应用程序【英文标题】:SendMessage to .NET console application 【发布时间】:2010-03-04 01:09:20 【问题描述】:

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

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

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

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

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

【问题讨论】:

@GX:在我回答的第一个链接中,有一个更新版本的代码可以满足 Windows 服务和控制台的需求...... 【参考方案1】:

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

MSDN 有一个example of named-pipe communication。具体来说,您需要使用的类是NamedPipeServerStreamNamedPipeClientStream,它们在创建后的行为与普通网络流非常相似。

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

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

【讨论】:

是的,我听说过命名管道,但从未真正尝试过实现它们。感谢您提供很好的资源链接【参考方案2】:

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

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。 我在发帖时没有足够的代表来添加评论。

以上是关于SendMessage 到 .NET 控制台应用程序的主要内容,如果未能解决你的问题,请参考以下文章

显示从 ASP.NET MVC 中的命令行进程获取的数据

MFC SendMessage和PostMessage 区别

.net Core

ASP.net 每周日程控制

Net实现钩子函数(Hook)以及通过SendMessage实现自动点击按钮和给文本框赋值

VB.net可以多线程控制同一个窗体及其控件吗