//=================================发送窗口代码=============================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
/*
制作人:林龙江
制作时间:2007年5月1日
只供参考,有错误之处请指出 !
*/
//手动加入的命名空间
using System.Runtime.InteropServices;
namespace SendCustomMessage
{
public partial class SendForm : Form
{
public SendForm(IntPtr Handle)
{
SendToHandle = Handle;
InitializeComponent();
}
private IntPtr SendToHandle;//这个变量用于保存要发送窗口的句柄
//自定义的消息
public const int USER = 0x500;
public const int MYMESSAGE=USER + 1;
//消息发送API
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(
IntPtr hWnd, // 信息发住的窗口的句柄
int Msg, // 消息ID
int wParam, // 参数1
ref SENDDATASTRUCT lParam // 参数2 [MarshalAs(UnmanagedType.LPTStr)]StringBuilder lParam
);
//发关按钮
private void Send_Click(object sender, EventArgs e)
{
string myText = textBox1.Text;
byte[] myInfo = System.Text.Encoding.Default.GetBytes(myText);
int len = myInfo.Length;
SENDDATASTRUCT myData;
myData.dwData = (IntPtr)100;
myData.lpData = myText;
myData.DataLength = len + 1;
SendMessage(SendToHandle, MYMESSAGE, 100, ref myData);//发送自定义消息给句柄为SendToHandle 的窗口,
//本例为创建本窗口的窗口句,创建时,传递给本窗口的构造函数
}
}
//要发信息数据结构,作为SendMessage函数的LParam参数
public struct SENDDATASTRUCT
{
public IntPtr dwData; //附加一些个人自定义标志信息,自己喜欢
public int DataLength; //信息的长度
[MarshalAs(UnmanagedType.LPStr)]
public string lpData; //要发送的信息
}
}
//=============================接收窗口代码====================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
/*
制作人:林龙江
制作时间:2007年5月1日
只供参考,有错误之处请指出 !
*/
//手动加入的命名空间
using System.Runtime.InteropServices;
namespace SendCustomMessage
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
sendForm = new SendForm(this.Handle);
sendForm.Show();
}
SendCustomMessage.SendForm sendForm;
//自定义消息
public const int USER = 0x500;
public const int MYMESSAGE = USER + 1;
///重写窗体的消息处理函数DefWndProc,从中加入自己定义消息 MYMESSAGE 的检测的处理入口
protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
//接收自定义消息MYMESSAGE,并显示其参数
case MYMESSAGE:
SendCustomMessage.SENDDATASTRUCT myData = new SendCustomMessage.SENDDATASTRUCT();//这是创建自定义信息的结构
Type mytype = myData.GetType();
myData = (SendCustomMessage.SENDDATASTRUCT)m.GetLParam(mytype);//这里获取的就是作为LParam参数发送来的信息的结构
textBox1.Text = myData.lpData; //显示收到的自定义信息
break;
default:
base.DefWndProc(ref m);
break;
}
}
}
}