C#进程间通信:[3]自定义消息

 时间:2024-10-08 14:37:23

本文介绍在C#中如何使用和自定义Windows消息实现进程间的通信,并传递一个字符串类型。

C#进程间通信:[3]自定义消息

工具/原料

VisualStudio2013(其他版本亦可)。

基础知识

1、在C#中,我们可以使用PostMessage或SendMessage向目标窗口发送消息,并重载目标窗口的消息处理函数WndProc来响应消息。自定义消息的边界是0x0400,我们自定义的消息应当比它大。

2、为了传递字符串,我们需要把托管的string类型封送到非托管内存中,而在目标窗口从非托管内存中提取字符串,使用Marshal.StringToHGlobalAuto()和Marshal.PtrToStringAuto()即可。

举例

1、新建C#WinForm项目,并命名为“CS自定义消息”,如下图:

C#进程间通信:[3]自定义消息

2、修改主窗体,布局如下:

C#进程间通信:[3]自定义消息

3、添加新建窗体,并布局如下:

C#进程间通信:[3]自定义消息

4、添加公开类Win32Api,代码如下:publiccl瞢铍库祢assWin32Api{#re爿讥旌护gionmsgpublicconstintUSER=0x0400;publicconstintUM_1=USER+1;#endregion#regionapi[DllImport("user32.dll")]publicstaticexternvoidPostMessage(IntPtrhWnd,intmsg,intwParam,IntPtrlParam);#endregion}

5、在Form1中添加代码,如下:publicpartialclassFor葡矩酉缸m1:Form{IntPt鸡堕樱陨rh;publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){varf=newForm2();h=f.Handle;f.Show();}privatevoidbutton2_Click(objectsender,EventArgse){stringstr=textBox1.Text;IntPtri=Marshal.StringToHGlobalAuto(str);Win32Api.PostMessage(h,Win32Api.UM_1,0,i);}}

6、在Form2中添加代码,如下:publicpartialclassFor葡矩酉缸m2:Form{publi艘早祓胂cForm2(){InitializeComponent();}protectedoverridevoidWndProc(refMessagem){switch(m.Msg){caseWin32Api.UM_1:stringstr=Marshal.PtrToStringAuto(m.LParam);textBox1.Text+=str+Environment.NewLine;break;default:base.WndProc(refm);break;}}}

7、调试运行,结果如下:

C#进程间通信:[3]自定义消息

Oracle11g的详细安装步骤 如何修改winform RichTextBox控件的字体颜色 SQL数据库置疑重附加失败解决办法 win10怎么安装svn?win10系统下安装配置svn方法 SqlServer 日志文件损坏时恢复数据库
热门搜索
瓶花图片 言情动漫 怎么转换图片格式 刷屏图片超长 幼儿绘画图片