Winform应用程序中如何实现Clipboard复制HTML内容?

2026-05-22 12:231阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计538个文字,预计阅读时间需要3分钟。

Winform应用程序中如何实现Clipboard复制HTML内容?

剪贴板针对不同的数据格式,在组织剪贴板内容时,需要遵循不同的格式要求。最简单的方法是复制一般文本内容,即复制一段普通的.txt文本内容。

使用方法如下:

1.调用 `ClipBord.Clear()` 清除剪贴板上的现有内容。

2.使用 `ClipBord.SetText(str)` 将新的文本内容 `str` 设置到剪贴板。

Winform应用程序中如何实现Clipboard复制HTML内容?

3.复制HTML内容时,确保将原始HTML内容放在引号 `` 内。

剪贴板针对不同的数据格式,在组织剪贴板内容时,有不同的格式要求。最简单的是,复制一般的.txt文本内容。使用方法 ClipBord.Clear(); ClipBord.SetText(str); 复制 Html,需要把原本的Html内容在包装一层。 详细:docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa767917(v=vs.85)?redirectedfrom=MSDN 在StartFragment和EndFragment之间的内容就是你自己的Html内容了。头部的键值对,键必须一样,值需要自己计算。 之间可以是Html内容,也可以是整个Html标签包含的内容,还包括Html标签。 我在网上找了个现成的方法,已经实验过了,是可以得:

public string HtmlFData(string html) { StringBuilder sb = new StringBuilder(); Encoding encoding = Encoding.UTF8; //Encoding.GetEncoding(936); string Header = @" Version: 1.0 StartHTML: {0:000000} EndHTML: {1:000000} StartFragment: {2:000000} EndFragment: {3:000000} "; string HtmlPrefix = @" <!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN""> <!--StartFragment--> "; string HtmlSuffix = @" <!--EndFragment--> "; // Get lengths of chunks int HeaderLength = encoding.GetByteCount(Header);//注意这里这样做,不直接取字符长度,是中文utf8占3字节,不是unicode的英文下的1字节 HeaderLength -= 16; // extra formatting characters {0:000000} int PrefixLength = encoding.GetByteCount(HtmlPrefix); int HtmlLength = encoding.GetByteCount(html); int SuffixLength = encoding.GetByteCount(HtmlSuffix); // Determine locations of chunks int StartHtml = HeaderLength; int StartFragment = StartHtml + PrefixLength; int EndFragment = StartFragment + HtmlLength; int EndHtml = EndFragment + SuffixLength; // Build the data sb.AppendFormat(Header, StartHtml, EndHtml, StartFragment, EndFragment); sb.Append(HtmlPrefix); sb.Append(html); sb.Append(HtmlSuffix); return sb.ToString(); }

  

然后,复制到剪贴板的代码:

var data = HtmlFData(strHtml); MemoryStream sMem = new MemoryStream(); byte[] byteHtml = Encoding.UTF8.GetBytes(data); sMem.Write(byteHtml, 0, byteHtml.Length); sMem.Flush(); var dataObject = new DataObject(); dataObject.SetData(DataFormats.Html, sMem); Clipboard.SetDataObject(dataObject); ... sMem.Close();

注意如果你直接用SetText这个api,并设置了Html格式,中文是会乱码的,所以这里用内存流把字符转为了utf-8的字节嘛保存的流对象里。

本文共计538个文字,预计阅读时间需要3分钟。

Winform应用程序中如何实现Clipboard复制HTML内容?

剪贴板针对不同的数据格式,在组织剪贴板内容时,需要遵循不同的格式要求。最简单的方法是复制一般文本内容,即复制一段普通的.txt文本内容。

使用方法如下:

1.调用 `ClipBord.Clear()` 清除剪贴板上的现有内容。

2.使用 `ClipBord.SetText(str)` 将新的文本内容 `str` 设置到剪贴板。

Winform应用程序中如何实现Clipboard复制HTML内容?

3.复制HTML内容时,确保将原始HTML内容放在引号 `` 内。

剪贴板针对不同的数据格式,在组织剪贴板内容时,有不同的格式要求。最简单的是,复制一般的.txt文本内容。使用方法 ClipBord.Clear(); ClipBord.SetText(str); 复制 Html,需要把原本的Html内容在包装一层。 详细:docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa767917(v=vs.85)?redirectedfrom=MSDN 在StartFragment和EndFragment之间的内容就是你自己的Html内容了。头部的键值对,键必须一样,值需要自己计算。 之间可以是Html内容,也可以是整个Html标签包含的内容,还包括Html标签。 我在网上找了个现成的方法,已经实验过了,是可以得:

public string HtmlFData(string html) { StringBuilder sb = new StringBuilder(); Encoding encoding = Encoding.UTF8; //Encoding.GetEncoding(936); string Header = @" Version: 1.0 StartHTML: {0:000000} EndHTML: {1:000000} StartFragment: {2:000000} EndFragment: {3:000000} "; string HtmlPrefix = @" <!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN""> <!--StartFragment--> "; string HtmlSuffix = @" <!--EndFragment--> "; // Get lengths of chunks int HeaderLength = encoding.GetByteCount(Header);//注意这里这样做,不直接取字符长度,是中文utf8占3字节,不是unicode的英文下的1字节 HeaderLength -= 16; // extra formatting characters {0:000000} int PrefixLength = encoding.GetByteCount(HtmlPrefix); int HtmlLength = encoding.GetByteCount(html); int SuffixLength = encoding.GetByteCount(HtmlSuffix); // Determine locations of chunks int StartHtml = HeaderLength; int StartFragment = StartHtml + PrefixLength; int EndFragment = StartFragment + HtmlLength; int EndHtml = EndFragment + SuffixLength; // Build the data sb.AppendFormat(Header, StartHtml, EndHtml, StartFragment, EndFragment); sb.Append(HtmlPrefix); sb.Append(html); sb.Append(HtmlSuffix); return sb.ToString(); }

  

然后,复制到剪贴板的代码:

var data = HtmlFData(strHtml); MemoryStream sMem = new MemoryStream(); byte[] byteHtml = Encoding.UTF8.GetBytes(data); sMem.Write(byteHtml, 0, byteHtml.Length); sMem.Flush(); var dataObject = new DataObject(); dataObject.SetData(DataFormats.Html, sMem); Clipboard.SetDataObject(dataObject); ... sMem.Close();

注意如果你直接用SetText这个api,并设置了Html格式,中文是会乱码的,所以这里用内存流把字符转为了utf-8的字节嘛保存的流对象里。