进程间通信(一):利用剪贴板
进程间通信的四种方式
1) 剪贴板
2) 匿名管道
3) 命名管道
4) 邮槽
在利用剪贴板之前,必须先打开剪贴板,利用OpenClipboard和CloseClipboard来打开和关闭剪贴板。
EmptyClipboard清除剪贴板,并释放句柄,并将所有权分配给当前打开剪贴板的窗口。
SetClipboardData和GetClipboardData分别设置和获取剪贴板的数据内容。
GlobalAlloc实现从堆中分配相应大小的内存,当以GMEM_MOVEABLE选项分配时,可以使用GlobalLock来将所得句柄转化为指针。
设置剪贴板代码为:
HANDLE hclip;
CString str;
char *pbuf;
int len;
if(OpenClipboard())
{
EmptyClipboard();
GetDlgItemText(IDC_EDIT1,str);
len=str.GetLength()+1;
hclip=GlobalAlloc(GMEM_MOVEABLE,len);
pbuf=(char*)GlobalLock(hclip);
strcpy(pbuf,str);
GlobalUnlock(hclip);
SetClipboardData(CF_TEXT,hclip);
CloseClipboard();
}
if(OpenClipboard())
{
if(IsClipboardFormatAvailable(CF_TEXT))
{
char *pbuf1;
HANDLE hclip1;
hclip1=GetClipboardData(CF_TEXT);
pbuf1=(char*)GlobalLock(hclip1);
GlobalUnlock(hclip1);
SetDlgItemText(IDC_EDIT2,pbuf1);
CloseClipboard();
}
}