惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
小众软件
小众软件
I
InfoQ
有赞技术团队
有赞技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Martin Fowler
Martin Fowler
月光博客
月光博客
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
V
Visual Studio Blog
博客园 - 叶小钗
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
GbyAI
GbyAI
P
Proofpoint News Feed
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - StationaryTraveller

如何查找微软VS软件中的图标 SQLite 的自增(AUTOINCREMENT)强制要求列的数据类型必须是INTEGER Qt动态获取翻译文本 Windows判断某窗口是否被其他窗口完全覆盖 MFC实现一个通用模态进度条窗口 如何批量修改“后期生成事件”为“预生成事件” MFC对话框中如何给一个控件发送消息 C语言根据函数指针偏移实现函数动态调用 Qt程序系统文本翻译 SVN创建分支 Qt多版本如何共存 Qt6编译的程序在某些win10系统报错 电脑忘机了用户名密码怎么办 Qt事件过滤器实现空闲检测 CMFCToolTipCtrl的AddTool导致内存增加 MFC中CBitmap、CBrush、CFont、CPalette、CPen、CRgn删除GDI对象问题 实现从QListWidgett拖拽项到QTableWidget Windows系统下通过命令行获取进程指标 命令模式实现撤销和重做机制 避免溢出求平均值的算法 字节流转16进制字符串 PImpl:Pointer to Implementation C++单例
Window剪切板
StationaryTraveller · 2025-08-01 · via 博客园 - StationaryTraveller
#include <Windows.h>
// 写入剪贴板
void CopyToClipboard(const char* pData, int length)
{
	if (OpenClipboard(NULL))
	{
		UINT uFormat = RegisterClipboardFormat(_T("MyData"));
		EmptyClipboard();
		HGLOBAL hClip = GlobalAlloc(GMEM_MOVEABLE, sizeof(int) + length);//前4字节是长度,接着是数据
		if (hClip != NULL)
		{
			char* pClipBuffer = (char*)GlobalLock(hClip);
			memmove(pClipBuffer, &length, sizeof(int));//前4字节是长度
			memmove((char*)pClipBuffer + sizeof(int), pData, length);//数据
			GlobalUnlock(hClip);
			SetClipboardData(uFormat, hClip);
		}
		CloseClipboard();
	}
}

// 从剪贴板读取
void* GetFromClipboard(int& length)
{
	void* pData = NULL;
	length = 0;
	if (OpenClipboard(NULL))
	{
		UINT uFormat = RegisterClipboardFormat(_T("MyData"));
		HANDLE hData = GetClipboardData(uFormat);
		if (hData != NULL)
		{
			char* pClipData = (char*)GlobalLock(hData);
			if (pClipData != NULL)
			{
				memmove(&length, pClipData, sizeof(int));
				pData = malloc(length);
				memmove(pData, pClipData + sizeof(int), length);
				GlobalUnlock(hData);
			}
		}

		CloseClipboard();
	}
	return pData;
}