进程间通信之(一)剪贴板
来源:互联网 发布:华为大数据在贵州 编辑:程序博客网 时间:2024/06/05 16:43
剪贴板实际上是系统维护管理的一块内存区域,当在一个进程中复制数据时,是将这个数据放到该块内存区域中,当在另一个进程中粘贴数据时,是从该块内存区域中取出数据。
剪贴板的VC实现很简单,下面是剪贴板实现过程以及我学习过程中的一些理解:
1.首先建立一个基于对话框的应用程序,并添加2个edit box和2个button,在这里,ID号分别为:IDC_EDIT_SEND,IDC_EDIT_RECV,IDC_BTN_SEND,IDC_BTN_RECV。并为button控件添加2个消息相应函数,分别为:OnBtnSend(),OnBtnRecv()。
2.OnBtnSend()函数下面添加相应代码,在这里实现文本通信:
(1)打开剪贴板,函数为OpenClipboard() 如果成功,返回非零值,否则,零值;
(2)如果打开成功,则获取剪贴板的使用权。调用函数EmptyClipboard();
(3)获取要传输的文本信息,GetDlgItemText(IDC_EDIT_SEND,CString);
(4)在前面第一句话就介绍了,剪贴板实际上是一块内存区域,所以接下来,我们要申请一块内存,调用GlobalAlloc(UINT,SIZE_T)分配内存。其中有2个参数,前面一个是标记,后面一个是分配字节数。这个函数如果成功则返回一个句柄。
(5)申请好了内存区域,我们要将文本字符串放入内存中。而前面申请内存时,返回的是一个句柄,所以要将句柄转为指针,在这里用GlobalLock(hMem);这个函数的参数是一个全局内存对象,返回该对象内存块第一个字节的指针。获得内存指针后,调用strcpy(char*,const char*)将文本字符串复制到内存中。最后不要忘记调用解锁函数GlobalUnLock(hMem);
(6)将文本信息放置到剪贴板上SetClipboardData(CF_TEXT,hMem);
(7)关闭剪贴板CloseClipboard(hMem);
具体代码如下:
//////////////////////////
if (OpenClipboard())
{
EmptyClipboard();
CString str;
HANDLE hClip;
char* pBuf;
GetDlgItemText(IDC_EDIT_SEND,str);
hClip = (char*)GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);
pBuf = (char*)GlobalLock(hClip);
strcpy(pBuf,str);
GlobalUnlock(hClip);
SetClipboardData(CF_TEXT,hClip);
CloseClipboard();
}
//////////////////////////////
3.OnBtnRecv()函数接收剪贴板中信息:
(1)打开剪贴板OpenClipboard()
(2)在这里进行一个判断,看剪贴板上是否有我们要的信息。函数IsClipboardFormatAvailable(CF_TEXT)
(3)读取剪贴板上,我们需要的信息。函数GetClipboardData(CF_TEXT);返回值是一个以指定格式存在的剪贴板对象的句柄;
(4)然后将句柄转为地址,调用GlobalLock()和GlobalUnLock(),获取内存地址;
(5)将数据放到IDC_EDIT_RECV中,SetDlgItemText();
(6)不要忘记关闭剪贴板。
具体代码如下:
///////////////////////////
if (OpenClipboard())
{
if(IsClipboardFormatAvailable(CF_TEXT))
{
char* pBuf;
HANDLE hClip;
hClip = GetClipboardData(CF_TEXT);
pBuf = (char*)GlobalLock(hClip);
GlobalUnlock(hClip);
SetDlgItemText(IDC_EDIT_RECV,pBuf);
}
CloseClipboard();
}
///////////////////////////
- 进程间通信之(一)剪贴板
- 进程间通信(一):利用剪贴板
- 进程通信之剪贴板
- 进程间通信之剪贴板clipboard
- Windows进程通信之剪贴板
- C++进程通信之剪贴板
- 进程间通信 - 剪贴板实现
- 进程间通信 剪贴板功能
- 进程间通信 - 剪贴板实现
- 进程间通信 - 剪贴板实现
- 进程间通信 - 剪贴板实现
- 进程间通信 - 剪贴板实现
- 进程间通信 - 剪贴板实现
- 进程间通信 - 剪贴板实现
- 第17章,进程间通信之剪贴板
- 孙鑫vc++ 17 进程间通信(1)剪贴板
- 利用剪贴板进行进程间通信
- 进程间通信详解 - 剪贴板实现
- reverse,reverse_copy,rotate,rotate_copy
- 学生信息管理系统————布尔值
- APUE读书笔记 6--------- 系统数据文件和信息
- next_permutation,pre_permutation,random_shuffle
- 黑马程序员--C#线程
- 进程间通信之(一)剪贴板
- partition,stable_partition,sort,stable_sort
- 依赖倒置原则--针对接口编程
- partial_sort,partial_sort_copy,nth_element
- jsp页面导出成word文件
- Lisp的作用域和生存期(scope and extent in lisp)
- oracle存储过程异常信息的显示
- heap算法,binary_search
- makefile学习