手机版
网站地图
美文美图
最新动态
你好,欢迎访问
好美文阅读网
个性皮肤
搜索
网站首页
美文
文章
散文
日记
诗歌
小说
故事
句子
作文
签名
祝福语
情书
范文
读后感
文学百科
美文摘抄
节日文章
名家散文
网名大全
座右铭
口号大全
面试技巧
说说大全
阅读答案
诗词默写
流言蜚语
节日祝福
好句子
经典台词
谚语大全
亲情故事
友情故事
表白情书
工作报告
活动总结
心得体会
专题汇总
美文网首页
进程间通讯
进程间通讯
作者:
北风知我意
| 来源:发表于
2018-08-24 19:23 被阅读12次
一、进程间通讯的方式进程间通讯的方式有很多,常用的有共享内存(内存映射文件、共享内存DLL、剪切板等)、命名管道和匿名管道、发送消息等几种方法来直接完成,另外还可以通过socket口、配置文件和注册表等来间接实现进程间数据通讯任务。以上这几种方法各有优缺点,具体到在进程间进行大数据量数据的快速交换问题上,则可以排除使用配置文件和注册表的方法;另外,由于管道和socket套接字的使用需要有网卡的支持,因此也可以不予考虑。这样,可供选择的通讯方式只剩下共享内存和发送消息两种。二、发送消息实现进程间通讯前准备下面的例子用到一个windows api 32函数[DllImport("User32.dll", EntryPoint = "SendMessage")]private static extern int SendMessage(IntPtr wnd,int msg,IntPtr wP,IntPtr lP);要有此函数,需要添加using System.Runtime.InteropServices;命名空间此方法各个参数表示的意义wnd:接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。msg:指定被发送的消息类型。wP:消息内容。lP:指定附加的消息指定信息。用api参考手册查看SendMessage用法时,参考手册则提示SendMessage与PostMessage之间的区别:SendMessage和PostMessage,这两个函数虽然功能非常相似,都是负责向指定的窗口发送消息,但是SendMessage() 函数发出消息后一直等到接收方的消息响应函数处理完之后才能返回,并能够得到返回值,在此期间发送方程序将被阻塞,SendMessage() 后面的语句不能被继续执行,即是说此方法是同步的。而PostMessage() 函数在发出消息后马上返回,其后语句能够被立即执行,但是无法获取接收方的消息处理返回值,即是说此方法是异步的。三、发送消息实现进程间通讯具体步骤1.新建windows应用程序(1)打开VS2008,新建一个“windows 应用程序”,主窗口为Form1,项目名称:ProcessCommunication(2)在Form1上添加一个标签为textBox1的文本框,并为Form1添加KeyDown事件,当Form1接收到KewDown消息时,将接收到的数据显示在label1上。public Form1(){InitializeComponent();this.KeyDown+=new KeyEventHandler(Form1_KeyDown);}private void Form1_KeyDown(object sender, KeyEventArgs e){this.textBox1.Text = Convert.ToString(e.KeyValue);}(3)编译运行,生成ProcessCommunication.exe2.新建windows应用程序 (1)打开VS2008,新建一个“windows 应用程序”,主窗口为Form1,项目名称:ProcessCommunication1,并在Form1上添加一个按钮和一个文本框namespace ProcessCommunication1{public partial class Form1 : Form{public Form1(){InitializeComponent();}//Win32 API函数:[DllImport("User32.dll", EntryPoint = "SendMessage")]private static extern int SendMessage(IntPtr wnd,int msg,IntPtr wP,IntPtr lP);private void button1_Click(object sender, EventArgs e){Process[] pros = Process.GetProcesses(); //获取本机所有进程for (int i = 0; i < pros.Length; i++){if (pros[i].ProcessName == "ProcessCommunication") //名称为ProcessCommunication的进程{IntPtr hWnd = pros[i].MainWindowHandle; //获取ProcessCommunication.exe主窗口句柄int data = Convert.ToInt32(this.textBox1.Text); //获取文本框数据SendMessage(hWnd, 0x0100, (IntPtr)data, (IntPtr)0); //点击该按钮,以文本框数据为参数,向Form1发送WM_KEYDOWN消息}} }}}3.启动ProcessCommunication.exe可执行文件,弹出Form1窗体称为接受消息窗体。启动ProcessCommunication1.exe可执行文件,在弹出的窗体中的文本框中输入任意数字,点击button1按钮,接受消息窗体textBox1即显示该数字。到此结束。
相关文章
网友评论
本文标题:
进程间通讯
本文链接:
https://www.haomeiwen.com/subject/ydpiiftx.html
延伸阅读
那年盛夏诗歌
环境监察队工作总结范文
优秀教师学习心得范文
华胥引的读后感300字
《Its red》教学反思范文
农资购销的合同范本
竞选中队委优秀演讲稿
辞金蹈海的成语解释
《世纪宝鼎》公开课教案设计
因为爱你,所以牵挂
今生今世红尘醉——美到
一个90后的内心独白
致已逝去的高中年华
深度阅读
您也可以注册成为美文阅读网的作者,发表您的原创作品、分享您的心情!
情人节
母亲节
重阳节
清明节
端午节
植树节
元宵节
妇女节
愚人节
圣诞节
父亲节
教师节
儿童节
劳动节
青年节
建军节
万圣节
平安夜
光棍节
中秋节
国庆节
感恩节
腊八节
更多话题
栏目导航
摄影
故事
互联网
读书
旅行
热点阅读
凋零
中元鬼节奥秘
我看过银河,可我只爱一粒星
「名人传」
温晴的半生缘——第九章
尴尬|140字微小说
唉,杨紫她咋又想不开去演绝色美女了?
006
爱你就像爱生命
网易运营每个月都能刷屏,产品经理要不要转运营
网友评论