VC++之线程和进程之用剪贴板实现进程间通信
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、创建对话框应用程序工程
二、编辑对话框资源
控件ID及标题
IDD_THREAD_DIALOG 用剪贴板实现进程间通信
IDC_STATIC 进程1发送数据:IDC_EDIT_SEND
IDC_STATIC 进程2接收数据:IDC_EDIT_REC
IDC_SEND 发送
IDC_REC 接收
三、添加消息响应函数
四、于“ThreadDlg.cpp”文件内添加消息响应函数代码
void CThreadDlg::OnRec()
{
// TODO: Add your control notification handler code here if(OpenClipboard())
{
if(IsClipboardFormatAvailable(CF_TEXT))
{
HANDLE clipboard;
char* buf;
clipboard=GetClipboardData(CF_TEXT);
buf=(char*)GlobalLock(clipboard);
GlobalUnlock(clipboard);
SetDlgItemText(IDC_EDIT_REC,buf);
CloseClipboard();
}
}
}
void CThreadDlg::OnSend()
{
// TODO: Add your control notification handler code here if(OpenClipboard()) //打开剪贴板 {
CString str;
HANDLE clipboard;
char * buf;
EmptyClipboard(); //清空剪贴板
GetDlgItemText(IDC_EDIT_SEND,str);
clipboard=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);
buf=(char*)GlobalLock(clipboard); //空字符作文本数据结尾,多分配一个字节
strcpy(buf,str);
GlobalUnlock(clipboard);
SetClipboardData(CF_TEXT,clipboard);
CloseClipboard();
}
}
五、编译
六、运行
七、函数说明
1、SetClipboardData()函数声明
HANDLE SetClipboardData(
UINT nFormat, //剪贴板格式
HANDLE hMen //特定格式之数据句柄
)
功能:以特定剪贴板格式复制数据到剪贴板。函数调用成功,返回数据句柄;失败,返回NULL,可用GetLastError()函数获取详细错误信息。
2、GetClipboardData()函数声明
HANDLE GetClipboardData(
UINT uFormat //剪贴板模式
)
功能:以特定模式获取剪贴板信息。函数调用成功,返回非零值;失败,返回零。
3、GlobalLock()函数声明
LPVOID GlobalLock(
HGLOBAL hMen //指向全局内存对象之句柄。
)
功能:锁定一全局内存对象。函数调用成功,返回内存对象第一个字节的指针;失败,返回NULL,可用GetLastError()函数获取详细错误信息。
4、GlobalUnlock()函数声明
LPVOID GlobalUnlock(
HGLOBAL hMen //指向全局内存对象之句柄。 )
功能:解除一全局内存对象之锁定。函数调用成功,返回非零值;失败,返回NULL,可用GetLastError()函数获取详细错误信息。
5、GlobalAlloc()函数声明
HGLOBAL GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1)(
UINT fFlags, //内存分配相关参数。
SIZE_T dwBytes //内存分配之大小
)
功能:分配一定数量之堆内存。函数调用成功,返回指向新分配内存对象只句柄;失败,返回NULL,可用GetLastError()函数获取详细错误信息。
6、CloseClipboard()函数声明
BOOL CloseClipboard(void)
功能:关闭剪贴板。函数调用成功,返回非零值;失败,返回零。
7、EmptyClipboard()函数声明
BOOL EmptyClipboard(void)
功能:清空剪贴板,同时释放剪贴板中的数据句柄。函数调用成功,返回非零值;失败,返回零。