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

 时间:2024-10-15 02:20:39

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

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

工具/原料

Visual Studio 2013(其他版本亦可)。

基础知识

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,代码如下:public class Win32Api { #re爿讥旌护gion msg public const int USER = 0x0400; public const int UM_1 = USER + 1; #endregion #region api [DllImport("user32.dll")] public static extern void PostMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam); #endregion }

5、在Form1中添加代码,如下: public partial class Form1 : Form { IntPtr h; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var f = new Form2(); h = f.Handle; f.Show(); } private void button2_Click(object sender, EventArgs e) { string str=textBox1 .Text ; IntPtr i=Marshal .StringToHGlobalAuto (str); Win32Api .PostMessage (h,Win32Api.UM_1 ,0,i); } }

6、在Form2中添加代码,如下: public partial class Form2 : Form { publi艘早祓胂c Form2() { InitializeComponent(); } protected override void WndProc(ref Message m) { switch (m.Msg) { case Win32Api .UM_1 : string str = Marshal.PtrToStringAuto(m.LParam); textBox1.Text += str+Environment .NewLine ; break; default : base.WndProc(ref m); break; } } }

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

C#进程间通信:[3]自定义消息
  • Oracle11g的详细安装步骤
  • 如何修改winform RichTextBox控件的字体颜色
  • SQL数据库置疑重附加失败解决办法
  • win10怎么安装svn?win10系统下安装配置svn方法
  • SqlServer 日志文件损坏时恢复数据库
  • 热门搜索
    手抄报模版 我的梦想手抄报 关于文明礼仪的手抄报 小学英语手抄报 健康饮食手抄报 创建文明校园手抄报 环保手抄报图片大全 七夕节手抄报 长城手抄报 卫生与健康手抄报