你需要注册 HTML 类型的剪贴板格式。
以下是读取 HTML / Word 类型剪贴板的完整例子。
注意:剪贴板里面的同一个内容,可能有多种格式。这个例子仅仅处理 HTML 格式。
// 读取剪贴板中 HTML 格式的数据
// 编译环境:VS2019
//
#include <windows.h>
#include <stdio.h>
#include <locale.h>
#include <string>
// 从剪贴板中获取 HTML 格式的数据
std::wstring GetClipboardHtmlData()
{
std::wstring out;
// 注册剪贴板格式
static UINT CF_HTML = 0;
if (CF_HTML == 0)
CF_HTML = RegisterClipboardFormat(L"HTML Format");
if (OpenClipboard(NULL)) // 打开剪贴板
{
if (IsClipboardFormatAvailable(CF_HTML)) // 判断剪贴板是否含有所需格式
{
HANDLE hClip = GetClipboardData(CF_HTML); // 读取剪贴板数据
char* pBuf = (char*)GlobalLock(hClip); // 获取文本数据指针
// 将 UTF-8 数据转换为 Unicode
int i = MultiByteToWideChar(CP_UTF8, NULL, pBuf, -1, NULL, 0); // 获取转换后的长度
out.resize(i);
MultiByteToWideChar(CP_UTF8, NULL, pBuf, -1, &out[0], i); // Utf-8 转换为 Unicode
GlobalUnlock(hClip);
CloseClipboard(); // 关闭剪贴板
}
}
return out;
}
// 主函数
int main()
{
std::wstring s = GetClipboardHtmlData(); // 从剪贴板获取 HTML 格式的数据
setlocale(LC_ALL, ""); // 设置控制台显示 Unicode 字符串
wprintf(s.c_str()); // 输出结果
return 0;
}