下面介绍使用SendMessage在进程间传递消息。(如:两个打开的应用程序间)
分析:
发送消息
接收消息
完整实例
分析:
发送消息
1/// <summary>
2 /// 发送消息样例
3 /// </summary>
4 /// <param name="strWindow">输入参数:windows消息字符串。</param>
5 /// <param name="strMessage">输入参数:发送消息字符串。</param>
6 /// <returns>返回值:发送是否成功。</returns>
7 public bool SendMessage(string strWindow,string strMessage)
8 {
9 IntPtr wnd = FindWindow(null,strWindow);
10 if(wnd!=IntPtr.Zero)
11 {
12 CopyDataStruct cds;
13 cds.dwData = (IntPtr)0;
14 cds.lpData = strMessage;
15 cds.cbData = System.Text.Encoding.Default.GetBytes(strMessage).Length + 1;
16
17 SendMessage(wnd,WM_COPYDATA,0, ref cds);
18 return true;
19 }
20 else
21 return false; // 窗体不存在。
22 }
2 /// 发送消息样例
3 /// </summary>
4 /// <param name="strWindow">输入参数:windows消息字符串。</param>
5 /// <param name="strMessage">输入参数:发送消息字符串。</param>
6 /// <returns>返回值:发送是否成功。</returns>
7 public bool SendMessage(string strWindow,string strMessage)
8 {
9 IntPtr wnd = FindWindow(null,strWindow);
10 if(wnd!=IntPtr.Zero)
11 {
12 CopyDataStruct cds;
13 cds.dwData = (IntPtr)0;
14 cds.lpData = strMessage;
15 cds.cbData = System.Text.Encoding.Default.GetBytes(strMessage).Length + 1;
16
17 SendMessage(wnd,WM_COPYDATA,0, ref cds);
18 return true;
19 }
20 else
21 return false; // 窗体不存在。
22 }
接收消息
1/// <summary>
2 /// 重写方法
3 /// </summary>
4 /// <param name="m">输入参数:消息对象。</param>
5 protected override void DefWndProc(ref Message m)
6 {
7 switch(m.Msg)
8 {
9 case WM_COPYDATA:
10 string str = ReceiveMessage(ref m);
11 MessageBox.Show(str);
12 break;
13 default:
14 break;
15 }
16
17 base.DefWndProc (ref m);
18 }
2 /// 重写方法
3 /// </summary>
4 /// <param name="m">输入参数:消息对象。</param>
5 protected override void DefWndProc(ref Message m)
6 {
7 switch(m.Msg)
8 {
9 case WM_COPYDATA:
10 string str = ReceiveMessage(ref m);
11 MessageBox.Show(str);
12 break;
13 default:
14 break;
15 }
16
17 base.DefWndProc (ref m);
18 }
完整实例
1using System;
2using System.Drawing;
3using System.Collections;
4using System.ComponentModel;
5using System.Windows.Forms;
6using System.Runtime.InteropServices;
7
8namespace FiveSpace.LawChannel.CommonControls
9{
10 /// <summary>
11 /// CopyDataFrm 用于进程间消息的传递。
12 /// </summary>
13 public class CopyDataFrm : System.Windows.Forms.Form
14 {
15 私有控件变量
21
22 构造函数
53
54 Windows 窗体设计器生成的代码
67
68 消息代码声明
71
72 FindWindow & SendMessage
99
100 进程间传输数据结构。
121
122 接收消息样例。
152
153 发送消息样例。
177 }
178}
179
2using System.Drawing;
3using System.Collections;
4using System.ComponentModel;
5using System.Windows.Forms;
6using System.Runtime.InteropServices;
7
8namespace FiveSpace.LawChannel.CommonControls
9{
10 /// <summary>
11 /// CopyDataFrm 用于进程间消息的传递。
12 /// </summary>
13 public class CopyDataFrm : System.Windows.Forms.Form
14 {
15 私有控件变量
21
22 构造函数
53
54 Windows 窗体设计器生成的代码
67
68 消息代码声明
71
72 FindWindow & SendMessage
99
100 进程间传输数据结构。
121
122 接收消息样例。
152
153 发送消息样例。
177 }
178}
179
Heclei
Enjoy every day.
www.ikucar.com