1.进程间通信方式
(1)剪贴板
(2)匿名管道
(3)命名管道
(4)邮槽
2.剪贴板代码
void CClipboardDlg::OnBnClickedBtnSend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
//(1)打开剪贴板
if (OpenClipboard())
{
//(2)清空剪贴板,将剪贴板的拥有者设置为当前窗口
EmptyClipboard();
HANDLE hClip;
//(3)为了存储数据,开辟一块大小和格式固定的内存
hClip = GlobalAlloc(GMEM_MOVEABLE,m_strSend.GetLength()+1);
char* pBuf;
//(4)将开辟的内存锁定,并且返回此块内存的指针
pBuf = (char*)GlobalLock(hClip);
strcpy(pBuf,m_strSend);//(5)开始复制控件中的数据进入内存
GlobalUnlock(hClip);//(6)解锁内存,将内存对象的锁计数减一
//(7)将数据放进剪贴板,设置对应的数据格式
SetClipboardData(CF_TEXT,hClip);
//(8)关闭剪贴板,如果不调用此函数,其他应用程序就不能调用剪贴板
CloseClipboard();
}
UpdateData(FALSE);
}
void CClipboardDlg::OnBnClickedBtnRecv()
{
// TODO: Add your control notification handler code here
//(1)打开剪贴板
if (OpenClipboard())
{
//(2)查看剪贴板中是否有此种类型的数据
if (IsClipboardFormatAvailable(CF_TEXT))
{
//(3)获得剪贴板的内存块首地址
HANDLE hClip = GetClipboardData(CF_TEXT);
char* pBuf;
//(4)锁定内存块并且得到内存块首地址的指针
pBuf = (char*)GlobalLock(hClip);
//(5)接触锁定
GlobalUnlock(hClip);
//(6)关闭剪贴板
CloseClipboard();
m_strRecv = (LPCTSTR)pBuf;
}
}
UpdateData(FALSE);
}