Winform消息机制
在Winform中使用消息机制完成这个功能相当容易。请看以下代码!
[DllImp
public static extern int FindWindow(string lpClassName, string lpWindowName);
[DllImp
public static extern int SendMessage(int hWnd, int Msg, int wParam, ref COPYDATASTRUCT lParam);
上面两个是API中的方法,FindWindow是查找另一个程序的方法,SendMessage是向另一个程序发送消息,告诉他我要使用,让他关闭当前使用的硬件。
public const int WM_COPYDATA = 0x004A;
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
上面的结构是sendmessage方法的一个参数类型,可用来传送参数,发送数据的!
// 发送方代码,告知另一个程序
public static void SendMessage()
{
int WINDOW_HANDLER = FindWindow(null, @"MyFormName");
if (WINDOW_HANDLER != 0)
{
byte[] arr = System.Text.Encoding.Default.GetBytes("测试数据");
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)1;
cds.lpData = "测试数据";
cds.cbData =arr.Length+ 1;
SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref cds);
}
}
//接收方代码
protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
label1.Text = mystr.lpData;
//做自己的业务处理...
break;
default:
base.DefWndProc(ref m);
break;
}
}
没有太多的解释,应该都挺好懂的,自己做个Demo看看就明白了!写在这里只是想做下笔记:)