`
isiqi
  • 浏览: 16454037 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

C# 下的进程间的通讯 -- 发消息篇

阅读更多

Net 并没有提供进程间通讯的类,其实这句话是不对的,.Net提供了强大的进程间通讯的功能,不仅可以完成本机上进程间的通讯,还可以完成网络上的任意两台计算机间的进程通讯。这些技术分别为WebService、企业级服务、.NET 远程处理,我会在后面的文章中逐步学习总结。
这里还是借助系统的功能来实现,提供一种利用发送消息的方法实现的进程间的通信。

发送方需要调用两个系统API:SendMessage与FindWindow。
非托管定义如下:


[DllImport("User32.dll",EntryPoint="SendMessage")]
privatestaticexternintSendMessage(
inthWnd,//目标窗口的handle
intMsg,//消息
intwParam,//第一个消息参数
refCOPYDATASTRUCTlParam//第二个消息参数
);

[DllImport("User32.dll",EntryPoint="FindWindow")]
privatestaticexternintFindWindow(stringlpClassName,string
lpWindowName);



还有一个数据结构:

publicstructCOPYDATASTRUCT
{
publicIntPtrdwData;
publicintcbData;
[MarshalAs(UnmanagedType.LPStr)]publicstringlpData;
}

WM_COPYDATA消息:

constintWM_COPYDATA=0x004A;

发送消息代码如下:

intWINDOW_HANDLER=FindWindow(null,@"接收窗口");
if(WINDOW_HANDLER!=0)
{
byte[]sarr=System.Text.Encoding.Default.GetBytes(txtMsg.Text);
intlen=sarr.Length;
COPYDATASTRUCTcds;
cds.dwData=(IntPtr)100;
cds.lpData=txtMsg.Text;
cds.cbData=len+1;
SendMessage(WINDOW_HANDLER,WM_COPYDATA,0,refcds);
}

接收方需要上面的那个数据结构的定义与消息常量的定义,然后重写主窗口的DefWndProc方法:

protectedoverridevoidDefWndProc(refSystem.Windows.Forms.Messagem)
{
switch(m.Msg)
{
caseWM_COPYDATA:
COPYDATASTRUCTmystr=newCOPYDATASTRUCT();
Typemytype=mystr.GetType();
mystr=(COPYDATASTRUCT)m.GetLParam(mytype);
txtMsg.Text=mystr.lpData;
break;
default:
base.DefWndProc(refm);
break;
}
}



别忘了引用命名空间:System.Runtime.InteropServices;

分享到:
评论

相关推荐

    C#进程间通讯

    在“C#进程间通讯”主题下,我们可以深入探讨以下知识点: 1. MSMQ的原理与配置:包括消息队列的创建、消息的发送与接收,以及如何处理消息的持久化和安全性。 2. 共享内存的创建与访问:介绍如何使用`Memory...

    ProcessCommunication_charep_C#进程间通讯_

    标题"ProcessCommunication_charep_C#进程间通讯_"所指的,是使用C#语言开发的一个示例程序,它展示了如何利用Windows消息系统进行进程间的通信。Windows消息是操作系统提供的一种机制,使得应用程序能够发送和接收...

    wpf通过句柄实现进程间通讯

    本篇文章将深入探讨如何在WPF应用中通过窗口句柄(HWND)来实现实时的进程间通讯。 首先,我们要理解窗口句柄的概念。在Windows操作系统中,每个窗口都有一个唯一的句柄,它是一个32位整数,用于标识窗口对象。在C#...

    通过WindowAPI实现进程间通讯

    综上所述,通过Window API实现进程间通讯是Windows平台上常见的编程实践。无论是WinForm还是WPF,开发者都可以根据需求选择合适的通信机制,如Mutex、NamedPipe、MemoryMappedFile或WM_COPYDATA,实现高效、可靠的...

    一个进程间通讯同步的C#框架引荐

    另外,目前也没有方便的线程间及进程间传递消息的方法。例如C/S和SOA,又或者生产者/消费者模式中就常常需要传递消息。为此我编写了一个独立完整的框架,实现了跨线程和跨进程的同步和通讯。这框架内包含了信号量,...

    跨进程通讯

    本篇文章将深入探讨Android中的跨进程通讯机制,尤其是通过AIDL(Android Interface Definition Language)实现的数据传输以及远程接口回调。 首先,我们要理解Android进程的概念。每个Android应用默认运行在独立的...

    C# 软件之间通讯之WM_COPYDATA

    本篇文章将深入探讨"C# 软件之间通讯之WM_COPYDATA"这一主题,以及如何通过这个机制在不同的C#应用中实现数据交换。 WM_COPYDATA是Windows消息系统中的一个特定消息,允许应用程序之间传递数据,而无需通过文件或...

    C#高性能服务器;端口-心跳高性能Socket服务器

    首先,Socket是网络编程的基础,它提供了进程间通信(IPC)的能力,使得不同计算机上的程序能够相互通信。在C#中,System.Net.Sockets命名空间提供了对Socket接口的支持,允许开发者创建TCP或UDP服务器和客户端。TCP...

    C#实现Socket编程(异步通讯) 第一阶段

    Socket是网络通信中的一个抽象概念,它是进程间通信(IPC)的一种方式,允许两个运行在网络上的程序通过网络交换数据。在C#中,Socket类位于System.Net.Sockets命名空间下,为开发者提供了丰富的API来处理网络通信。...

    C#管道通信

    在IT领域,尤其是在软件开发中,进程间通信(IPC,Inter-Process Communication)是一项至关重要的技术,它使得不同进程能够共享数据和协调工作。在Windows操作系统中,管道是一种常见的IPC方式,C#作为.NET框架的...

    聊天程序局域网通讯可以互相发消息

    为了实现“局域网通讯可以互相发消息”的功能,我们需要构建两个核心组件:服务器(Server)和客户端(Client)。服务器是聊天系统的中心,接收并转发客户端之间的消息。客户端则是用户交互的界面,允许用户输入和...

    C#-Socket.rar

    一个Socket可以看作是网络上的两个进程间通信的端点,通过创建服务器端Socket监听特定端口,等待客户端Socket连接。一旦连接建立,双方就可以进行数据交换。 1. **TCP/IP服务器与客户端**:服务器端通常使用`Socket...

    wpf与wpf程序间的通讯机制

    本篇文章将深入探讨WPF与WPF程序间如何通过句柄实现通讯,以及如何实现打开、发送消息和关闭其他程序的功能。 首先,我们需要理解“句柄”是什么。在Windows操作系统中,句柄是一个唯一标识系统对象(如窗口、文件...

    Socket 通信C#

    Socket提供了进程间通信(IPC)的能力,使得一台计算机上的程序可以与另一台计算机上的程序进行数据交换。本篇文章将深入探讨C#中的Socket通信,并以"Socket通讯控制台程序"为例,解释如何实现这个过程。 首先,让...

    c# 聊天程序(socket)

    本篇将深入探讨如何利用C#实现一个简单的聊天程序,通过Socket编程来搭建客户端与服务器之间的通讯桥梁。 一、Socket基础 Socket是网络通信的基础,它提供了进程间通信的接口,可以理解为在网络上的两个端点之间...

    Codesys共享内存范例.7z

    共享内存是一种在多个进程间共享和传递数据的方法,它允许不同的程序在同一块内存区域读写数据,无需通过传统的I/O操作或消息传递。在Codesys与C#之间利用共享内存,可以实现高效的数据交互,尤其是在实时性要求高的...

    unity Socket通讯

    Socket是网络编程的一个接口,它提供了进程间通信(IPC)的能力,特别是在因特网上的不同主机之间。TCP(传输控制协议)是Socket通信中常用的一种协议,它提供了一种面向连接、可靠的数据传输服务。 在Unity中,...

    C #串口通讯

    本篇将详细讲解如何使用C#进行串口通信,以及`SerialPortListener`这个类可能包含的功能。 首先,我们需要了解C#中的`System.IO.Ports`命名空间,这是.NET Framework提供的用于串口通信的核心库。在这个命名空间下...

    NetSocket.zip

    Socket是网络编程的基本组件,它提供了进程间通信(IPC)的能力,使得不同计算机上的程序可以相互通信。C#中的System.Net.Sockets命名空间提供了Socket类,用于实现TCP/IP或UDP/IP协议的网络通信。Socket类支持两种...

    xmlRpc应用

    XML-RPC(XML Remote Procedure Call)是一种通过网络进行进程间通信的技术,它允许软件通过HTTP协议传递基于XML的数据,从而实现远程调用方法。在IT领域,XML-RPC被广泛应用于分布式系统,允许不同编程语言和平台...

Global site tag (gtag.js) - Google Analytics