windows 平台下进程间的通信:
1, 剪贴板
2, 匿名管道
3, 命名管道
4, 邮槽
剪贴板: 是系统维所管理的一块内存区域, 当在一个进程中复制数据时, 是将这个数据族到该块内存区域中, 当在另一个进程中粘贴数据时, 是从该块内存区域中取出数据, 然示在窗口上.
下面是一个简单的MFC例子(字符集改为:多字符集)
void Ctest07Dlg::OnBnClickedButton1()
{//发送
this->UpdateData();
if (!OpenClipboard())
return;
EmptyClipboard(); //清空剪贴板
//GlobalAlloc分配全局内存块, 返回数据格式句柄
HANDLE hclip = GlobalAlloc(GMEM_MOVEABLE, //该参数为一个标记,
m_txt.GetLength() + 1/*需要分配的内存大小*/);
//GlobalLock为内存块加锁并返回第一个字节的首地址
char * buffer = (char *)GlobalLock(hclip);
strcpy(buffer, m_txt);
//为全局内存块解锁, 只有解锁完成后才能往内存块中放置数据
GlobalUnlock(hclip);
//向剪贴板中放置数据
SetClipboardData(CF_TEXT, //剪贴板中放置数据
hclip/*具有指定格式的数据句柄*/);
CloseClipboard(); //关才剪贴板
}
void Ctest07Dlg::OnBnClickedButton2()
{//获取
if (OpenClipboard())
{
//IsClipboardFormatAvailable 用来检测剪贴板上是否包含了参数中指定的特定格式的数据
if (IsClipboardFormatAvailable(CF_TEXT))
{
//GetClipboardData 从剪贴板中获得指定格式的数据
HANDLE hClip = GetClipboardData(CF_TEXT);
char * pBuf = (char *)GlobalLock(hClip);
GlobalUnlock(hClip);
m_str = pBuf;
this->UpdateData(FALSE);
}
CloseClipboard();
}
}