Window剪切板

#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;
}

  

posted @ 2025-08-01 09:43  快雪  阅读(16)  评论(0)    收藏  举报