C#进程间通信.pdf
《C#进程间通信.pdf》由会员分享,可在线阅读,更多相关《C#进程间通信.pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C#进程间通信目前,网上关于C#进程间通信的方法有很多种,但是总结起来它们不外乎从以下两个方面进行考虑一、在两个进程之间建立一个共同区域,其中一个进程改变这个区域的内容,而另一个进程则去读取它,反之亦然。比如,可以让两个进程共享同一块内存,通过改变和读取内存中的内容进行通信;或者,创建一个文件,两个进程同时占用,甚至可以利用注册表或者剪贴板充当这个“共同区域”。二、利用API 函数去找到进程窗口的句柄,然后用API 去控制这个窗口。例如,导入“User32.dll”中的FindWindow、FindWindowEx函数查找窗口,并获取窗口句柄,也可直接利用 C#中的 Process类来启动程序
2、,并获取这个进程的主窗口的句柄,等等。在编程时,我们往往需要选择一种即方便编写,效率又高的程序。第一种类型相对比较复杂,而且效率不高,相比来讲,第二种类型在不降低程序运行效率的情况下编写更简单。下面我就以一个示例程序来讲解如何使用Process类和 API 实现两个进程之间的传输数据。第一步:(1)打开 VS2005,新建一个“windows 应用程序”,主窗口为Form1(2)在 Form1 上添加一个标签label1,并为 Form1 添加 KeyDown 事件,当Form1 接收到KewDown 消息时,将接收到的数据显示在label1 上。private void Form1_KeyD
3、own(object sender,KeyEventArgs e)this.label1.Text=Convert.ToString(e.KeyValue);(3)编译运行,生成Form1.exe 第二步:(1)打开 VS2005,新建一个“windows 应用程序”,主窗口为Form2,并在 Form2 上添加三个按钮和一个文本框,分别为button1,button2,button3,textbox1(2)在 Form2.cs 中添加引用:using System.Diagnostics;using System.Runtime.InteropServices;并导入 Win32 API 函
4、数:DllImport(User32.dll,EntryPoint=SendMessage)private static extern int SendMessage(IntPtr wnd,int msg,IntPtr wP,IntPtr lP);(3)在 Form2 类中定义以下两个变量ProcessStartInfo info=new ProcessStartInfo();Process pro=new Process();(4)为 Form2 添加 Load 事件响应private void Form1_Load(object sender,EventArgs e)info.FileNa
5、me=Form1.exe;pro.StartInfo=info;(5)为 button1,button2,button3 分别添加click 事件响应,并添加响应内容:Button1:pro.Start();点击该按钮,启动Form1.exe 程序Button2:pro.Kill();点击该按钮,退出From1.exe 程序Button3:IntPtr hWnd=pro.MainWindowHandle;/获取 Form1.exe 主窗口句柄int data=Convert.ToInt32(this.textBox1.Text);/获取文本框数据SendMessage(hWnd,0 x0100
6、,(IntPtr)data,(IntPtr)0);/发送 WM_KEYDOWN消息点击该按钮,以文本框数据为参数,向Form1 发送 WM_KEYDOWN消息(6)编译运行,生成Form2.exe 第三步:将 Form1.exe 和 Form2.exe 拷贝到同一目录下,启动Form2.exe:点击 button1 按钮,则Form1.exe 启动点击 button2 按钮,则Form1.exe 退出在 Form1.exe 程序正在运行的情况下,在 Form2 窗口的文本框中输入任意数字并点击button3按钮,Form1 窗口的 label1 即显示该数字。以上只是简单的介绍了利用C#的 P
7、rocess类和 Win32 API 函数实现进程之间的数据传输,读者可以根据实际情况举一反三,编写功能更加强大的程序。c#进程间通信在 Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有1、使用内存映射文件2、通过共享内存DLL共享内存3、使用 SendMessage向另一进程发送WM_COPYDATA消息比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一中方法.(ZT)WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。Windows在通过 WM_COPYDATA消息传递期间,不提供继承同步方式。SDK文档推荐用户使用SendM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 进程 通信
限制150内