#include <Windows.h>
// 复制数据至剪切板
void CopyToClipboard(const char* data)
{
if (!data)
{
return;
}
int nDataLen = strlen(data) + 1;
// 将数据保存至粘贴板
HGLOBAL hClip;
// 定义一个HGLOBAL句柄变量用来指向分配的内存块
if (OpenClipboard(NULL))
{
// 将剪贴板内容清空
EmptyClipboard();
// 在堆上分配可移动的内存块,程序返回一个内存句柄
hClip = GlobalAlloc(GMEM_MOVEABLE, nDataLen);
// 对分配的内存块进行加锁,将内存块句柄转化成一个指针,并将相应的引用计数器加1
char* buff = (char*)GlobalLock(hClip);
strcpy_s(buff, nDataLen, data);
// 数据写入完毕,进行解锁操作,并将引用计数器数字减1
GlobalUnlock(hClip);
// 将存放有数据的内存块放入剪贴板的资源管理中
SetClipboardData(CF_TEXT, hClip);
// 关闭剪贴板,释放剪贴板资源的占用权
CloseClipboard();
}
}
// 从剪切板中取得数据
void GetTextFromClipboard(char* pStr, int size)
{
if (OpenClipboard(NULL))//打开剪贴板
{
if (IsClipboardFormatAvailable(CF_TEXT))//判断格式是否是我们所需要
{
HANDLE hClip;
//读取数据
hClip = GetClipboardData(CF_TEXT);
char* str = (char*)GlobalLock(hClip);
memset(pStr, 0, size);
if (str != NULL)
strcpy_s(pStr, size, str);
GlobalUnlock(hClip);
CloseClipboard();
}
}
}
亲测可用(VS2019)