下面介绍使用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
}
/// <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
else21
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
}
/// <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
}完整实例
1
using System;
2
using System.Drawing;
3
using System.Collections;
4
using System.ComponentModel;
5
using System.Windows.Forms;
6
using System.Runtime.InteropServices;
7![]()
8
namespace 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![]()
using System;2
using System.Drawing;3
using System.Collections;4
using System.ComponentModel;5
using System.Windows.Forms;6
using System.Runtime.InteropServices;7

8
namespace FiveSpace.LawChannel.CommonControls9
{10
/// <summary>11
/// CopyDataFrm 用于进程间消息的传递。12
/// </summary>13
public class CopyDataFrm : System.Windows.Forms.Form14
{15
私有控件变量21

22
构造函数53

54
Windows 窗体设计器生成的代码67

68
消息代码声明71

72
FindWindow & SendMessage99

100
进程间传输数据结构。121

122
接收消息样例。152

153
发送消息样例。177
}178
}179

Heclei
Enjoy every day.
www.ikucar.com


浙公网安备 33010602011771号