.Net 利用消息在进程间通讯实现进程互操作

  有时候我们会遇到需要在两个进程间通过某种方式实现互操作,方法有很多,例如你可以尝试让两个进程持续监视一个外部文件,由此文件记录各自进程的数据;还有可以使用网络端口实现进程间通讯、共享一片内存区域记录及传递各自进程的数据等;此处讲述在.net 下如何利用消息的传递及处理实现两个进程的通讯。

  是的,这里所说的消息指的就是Windows的消息机制,对于 I T 菜鸟,可以这样简单理解Windows 消息机制:Windows系统可以同时运行很多很多应用程序,Windows系统要让某一个程序做一件事情,就会给这个程序发送一条消息通知该程序该做什么了。

先引入Windows API 方法 SendMessage :

1 [DllImport("User32.dll", EntryPoint = "SendMessage")]
2 private static extern int SendMessage(IntPtr wnd, int msg, IntPtr wP, IntPtr lP);

给指定用于响应消息的窗体对象重写消息处理过程

 1 protected override void WndProc(ref System.Windows.Forms.Message msg)
 2 {
 3     switch(msg.Msg)
 4     {
 5         case 0x0400:
 6             bool OnOff = Convert.ToBoolean((int)msg.LParam);
 7             break;
 8         default:
 9             base.WndProc(ref msg);
10             break;
11     }
12 }

好了,上述代码实现了接收消息的程序如何处理接收到的消息地址(ID)为0x0400的自定义消息。

现在只需要在用于发送消息的项目编写发送消息的内容即可

1 SendMessage(Program.hWnd, 0x0400, (IntPtr)0, (IntPtr)1);
时间: 2024-10-28 12:16:38

.Net 利用消息在进程间通讯实现进程互操作的相关文章

linux_c开发(5-1)进程间通讯_进程间通讯概念

目的:为什么进程间需要通信? 1.数据传输 一个进程需要将他的数据发送给另外一个进程. 2.资源共享 多进程之间共享同样的资源. 3.通知事件 一个进程需要向另一个或一组进程发送消息,通知他们发生了某种事件. 4.进程控制 有些进程希望完全控制另一个进程的执行(eg:debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道他的状态改变. 发展: linux进程间通讯(IPC)由以下及部分发展而来: 1.UNIX间进程通讯 2.基于system v进程间通讯 3.POSIX进

【进程间通讯与进程池】 -- 2019-08-11 18:46:25

原文: http://106.13.73.98/__/4/ 目录 一.队列 二.管道 三.进程间数据共享 四.进程池 进程间通讯:IPC(Inter-Process Communication) 一.队列: 队列:先进先出(First In First Out)简称 FIFO 栈:先进后出(First In Last Out)简称 FILO 1. multiprocessing.Queue模块 用于创建共享的进程队列,Queue是多进程安全的队列,可以实现对进程之间的数据传递,队列底层是使用管道

【进程间通讯与进程池】 -- 2019-08-16 18:12:52

原文: http://blog.gqylpy.com/gqy/230 " 目录 一.队列 二.管道 三.进程间数据共享 四.进程池 进程间通讯:IPC(Inter-Process Communication) 一.队列: 队列:先进先出(First In First Out)简称 FIFO 栈:先进后出(First In Last Out)简称 FILO 1. multiprocessing.Queue模块 用于创建共享的进程队列,Queue是多进程安全的队列,可以实现对进程之间的数据传递,队列

【进程间通讯与进程池】 𶥔

原文: http://blog.gqylpy.com/gqy/230 " 目录 一.队列 二.管道 三.进程间数据共享 四.进程池 进程间通讯:IPC(Inter-Process Communication) 一.队列: 队列:先进先出(First In First Out)简称 FIFO 栈:先进后出(First In Last Out)简称 FILO 1. multiprocessing.Queue模块 用于创建共享的进程队列,Queue是多进程安全的队列,可以实现对进程之间的数据传递,队列

linux_c 开发(5-5)进程间通讯_消息队列

进程间通讯_消息队列 定义: UNIX早起通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便.消息队列(也称报文队列)则克服了这些缺点. 发展: 消息队列就是一个消息的链表.可以把消息看做一个记录,**具有特定的格式.进程可以向中按照一定的规则添加新消息:另一些进程则可以从消息队列中读取消息. 分类: 目前主要有两种类型的消息队列:POSIX消息队列 以及系统V消息队列,系统V消息队列目前被大量使用. 持续性:系统V消息队列是随内核持续的,只有在

进程间通讯之消息队列

#include<stdio.h> #include<sys/msg.h> #define MAX_MSG_BUF_LEN    512 int iKey = 6004; struct ipcmsgbuf { long mtype; char mtext[MAX_MSG_BUF_LEN]; }; int main( void ) { int qid; char sTmp[128], sTmp2[128], sTmp3[128]; struct ipcmsgbuf msgdata;

win32进程间通讯--共享内存

小白一枚,如有不对,请各位大神多多指教! 最近看了看win32进程间通讯.简单写了写利用共享内存实现进程间通讯 使用共享内存实现进程间通讯: 1.在WM_CREATE消息下创建文件映射内核对象 1 hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, (LPCWSTR)szName); 2.在需要进行数据共享的地方映射缓存区视图,将要写入的数据放入pbuf 1 pBuf = (c

C#进程间通讯技术-整理。

原文:C#进程间通讯技术-整理. 扩展阅读:http://www.cnblogs.com/joye-shen/archive/2012/06/16/2551864.html 一.进程间通讯的方式 1)共享内存 包括:内存映射文件,共享内存DLL,剪切板. 2)命名管道及匿名管道 3)消息通讯 4)利用代理方法.例如SOCKET,配置文件,注册表方式. 等方式. 方法一:通讯. 进程间通讯的方式有很多,常用的有共享内存(内存映射文件.共享内存DLL.剪切板等).命名管道和匿名管道.发送消息等几种方

管道实现进程间通讯 、WaitNamedPipe

一.管道实现进程间通讯 主要的理论知识 1.什么是管道以及分类 管道是两个头的东西,每一个头各连接一个进程或者同一个进程的不同代码,依照管道的类别分有两种管道,匿名的和命名的:依照管道的传输方向分也能够分成两种,单向的双向的.依据管道的特点,命名管道通经常使用在网络环境下不同计算机上执行的进程之间的通信(当然也能够用在同一台机的不同进程中)它能够是单向或双向的:而匿名管道仅仅能用在同一台计算机中,它仅仅能是单向的.匿名管道事实上是通过用给了一个指定名字的有名管道来实现的. 使用管道的优点在于:读