Fork me on GitHub

C# winform ClipBord复制Html

剪贴板针对不同的数据格式,在组织剪贴板内容时,有不同的格式要求。最简单的是,复制一般的.txt文本内容。使用方法
ClipBord.Clear();
ClipBord.SetText(str);
复制 Html,需要把原本的Html内容在包装一层。
0
在StartFragment和EndFragment之间的内容就是你自己的Html内容了。头部的键值对,键必须一样,值需要自己计算。
之间可以是Html内容,也可以是整个Html标签包含的内容,还包括Html标签。
我在网上找了个现成的方法,已经实验过了,是可以得:
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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();
 
        }

  

然后,复制到剪贴板的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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的字节嘛保存的流对象里。

posted @   HelloLLLLL  阅读(163)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示