概述
调用WinAPI实现剪切板操作的函数:
BOOL OpenClipboard(HWND hWndNewOwner);
//打开剪切板
BOOL EmptyClipboard(VOID);
//清空剪切板
HANDLE SetClipboardData(UINT uFormat, HANDLE hMem);
//设置剪切板内容
HANDLE GetClipboardData(UINT uFormat);
//返回剪切板内容的内存块句柄
BOOL CloseClipboard();
//关闭剪切板
常用的剪切板数据类型(还包括很多其它类型,详情可参考MSDN)
CF_TEXT
//一段ANSI文本
CF_OEMTEXT
//一段DOS文本
CF_UNICODETEXT //一段Unicode文本
CF_LOCALE
//区域标识
CF_BITMAP
//位图
CF_DIB
//设备无关位图
需要使用Win32内存块与剪贴板交互,常用Win32内存块操作函数(另有LocalAlloc等,功能完全相同):
HGLOBAL GlobalAlloc(分配选项, 分配内存大小);
//分配全局内存并返回它的句柄或指针
HGLOBAL GlobalFree(内存块句柄);
//释放全局内存
SIZE_T GlobalSize(内存块句柄);
//返回全局内存的大小
LPVOID GlobalLock(内存块句柄);
//获得全局内存所有权,并返回指向全局内存的指针
BOOL GlobalUnlock(内存块句柄);
//释放全局内存所有权,GlobalAlloc分配选项如果是GHND,则分配可变内存,清零内存并返回全局内存句柄,需要GlobalLock以获取指针
//GlocalAlloc分配选项如果是GPTR,则分配固定内存,清零内存并直接返回指针
复制(向剪贴板内容)操作流程:
一、创建一块内存块
- 分配一个适当大小的内存块(GlobalAlloc, GHND)
- 锁定它并获得所有权(GlobalLock)
- 将要复制的内容拷贝到该内存
- 释放内存的所有权(GlobalUnlock)
二、将剪切板内容设置为它
- 打开剪贴板(OpenClipboard)
- 清空剪贴板(EmptyCliboard)
- 将该内存块设为剪贴板的数据(SetClipboardData)
- 关闭剪贴板(CloseClipboard)
粘贴(读剪贴板内容)操作流程:
- 打开剪贴板(OpenClipboard)
- 获取包含剪贴板内容的内存块句柄(GetClipboardData)
- 锁定该内存块并获得指针(GlobalLock)
- 读取该内存的内容
- 关闭剪贴板(CloseClipboard)
实例代码:
bool CopyTextToClipboard(const char *text)
{
int i = 0, j = 0;
for (; i < 6; i++)
{
//打开剪切板
j = OpenClipboard(NULL);
//判断是否打开成功,如果打开失败则重新尝试5次
if (j == 0 && i < 5)
Sleep(60);
if (j == 0 && i == 5)
return false;
if (j != 0)
{
i = 0;
j = 0;
break;
}
}
//分配字节数,HGLOBAL表示一个内存块
HGLOBAL hmem = GlobalAlloc(GHND, strlen(text) + 1);
//锁定内存中指定的内存块,并返回一个地址值令其指向内存块的起始处
char *pmem = (char *)GlobalLock(hmem);
//清空剪切板并释放剪切板内数据的句柄
EmptyClipboard();
memcpy(pmem, text, strlen(text) + 1);
SetClipboardData(CF_TEXT, hmem);
//写入数据
CloseClipboard();
//关闭剪切板
GlobalFree(hmem);
//释放内存块
return true;
//返回成功
}
转载于:https://www.cnblogs.com/coolcpp/p/clipboard.html
最后
以上就是虚心吐司为你收集整理的Windows剪切板操作的全部内容,希望文章能够帮你解决Windows剪切板操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复