HardBirch

在Wince/WM实现进程间通信

时间:09-12-18 栏目:安卓入门与提高 作者:张飞不张,文采横飞 评论:0 点击: 1,379 次

      最近在做WM上的进程间通信,使用WindowMessage实现两个进程间的通信,感觉MessageWindow不太好用,所以就用别的方法实现接收WindowsMessage。本文的代码大部分来自网络,东凑西凑才拼成本文。

先来封装一下需要使用的功能,命名为Cls_Message:































































static private IntPtr AllocHGlobal(int cb)
{
IntPtr hMemory = new IntPtr();
hMemory = LocalAlloc(LPTR, cb);
return hMemory;
}
static private void FreeHGlobal(IntPtr hMemory)
{
if (hMemory != IntPtr.Zero)
LocalFree(hMemory);
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="formTitle">目标窗体的名称</param>
/// <param name="message">消息内容</param>
static public void SendMessage(String formTitle,String message)
{
IntPtr hWndDest = FindWindow(null, formTitle);
COPYDATASTRUCT oCDS = new COPYDATASTRUCT();
oCDS.cbData = (message.Length + 1) * 2;
oCDS.lpData = LocalAlloc(LPTR, oCDS.cbData);
Marshal.Copy(message.ToCharArray(), 0, oCDS.lpData, message.Length);
oCDS.dwData = 1;
IntPtr lParam = AllocHGlobal(oCDS.cbData);
Marshal.StructureToPtr(oCDS, lParam, false);
SendMessageW(hWndDest, WM_COPYDATA, IntPtr.Zero, lParam);
LocalFree(oCDS.lpData);
FreeHGlobal(lParam);
}
}
 


接下来贴出调用代码,实现自发自收,如果要发给别的进程,只需要把SendMessage的第一个参数改为目标窗体的名称即可(当然目标窗体也必须引用了Cls_Message实现收信息处理):













 


 

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: 在Wince/WM实现进程间通信

在Wince/WM实现进程间通信:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐