c# - SendMessage 到 .NET 控制台应用程序

标签 c# .net ipc sendmessage

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

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

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

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

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

最佳答案

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

MSDN 有一个 example of named-pipe communication .具体来说,您需要使用的类是 NamedPipeServerStreamNamedPipeClientStream,它们在创建后的行为在很大程度上类似于普通网络流。

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

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

关于c# - SendMessage 到 .NET 控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2376237/

相关文章:

c - 为什么通过网络发送的数据会转换为网络字节序?

c# - 运行测试时未调用 C# 中的 nUnit SetupFixture 类

c# - 依赖注入(inject): single class (WCF service) having multiple dependencies (DB repositories) how to handle?

c# - 将完整的消息写入 NetworkStream 或写入每条消息的各个部分是个好主意吗?

c# - TCP 文件传输 - 几个字节错误

c# - 当我从条件组中省略 "else"时,为什么 .NET 的正则表达式引擎表现得如此奇怪?

c# - 如何在 EF Core 中查询多对多关系

.net - Windows:列出并启动与扩展关联的应用程序

c - 在 C 程序之间共享变量值

javascript - 在 Electron 中的两个渲染器进程之间直接通信