首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clipboard.SetText(HTML)不再工作

Clipboard.SetText(HTML)不再工作
EN

Stack Overflow用户
提问于 2017-07-24 17:29:36
回答 1查看 1K关注 0票数 0

我有一个代码,它在HTML标记之间添加某些生成的字符串,并使用HTML数据设置剪贴板。如果我还没有疯,我确定这段代码以前对我有用,没有对它做任何修改,但它不再工作了!

我找到了Clipboard HTML的文档,并以这个例子为例,进行了下面的测试,它对我也不起作用。

代码语言:javascript
复制
 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

    Dim meh As String = _
            "Version:0.9" & vbCrLf & _
            "StartHTML:71" & vbCrLf & _
            "EndHTML:160" & vbCrLf & _
            "StartFragment:130" & vbCrLf & _
            "EndFragment:150" & vbCrLf & _
            "StartSelection:130" & vbCrLf & _
            "EndSelection:150" & vbCrLf & _
            "<!DOCTYPE html>" & vbCrLf & _
            "<HTML> " & vbCrLf & _
            "<BODY> " & vbCrLf & _
            "<!--StartFragment-->" & vbCrLf & _
            "<B>bold.</B> <I><B>This is bold italic.</B></I> <I>This</I> " & vbCrLf & _
            "<!--EndFragment--> " & vbCrLf & _
            "</BODY> " & vbCrLf & _
            "</HTML>"
    Clipboard.SetText(meh, TextDataFormat.Html)

End Sub

我也做了这样简单的事情:-

代码语言:javascript
复制
Clipboard.SetText(TextBox1.text, TextDataFormat.Html)

然后我在粘贴不同的字符串,为StartHTML仔细计算字节,等等.

代码语言:javascript
复制
Version:0.9
StartHTML:71
EndHTML:178
StartFragment:71
EndFragment:178
<!DOCTYPE html>
<HTML> 
<BODY> 
<B>bold.</B> <I><B>This is bold italic.</B></I> <I>This</I> 
</BODY> 
</HTML>

我能够在VB2010、VB2017和Windows 7上再现这种意外的行为

值得补充的是,我使用的是Clipdiary应用程序,该应用程序在运行上述代码后返回“无法进行描述和标题”之类的内容

我想知道有人能不能运行这个代码,看看我做错了什么,因为我在这里被要求;我还在某个地方找到了这个代码:-

代码语言:javascript
复制
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    PasteLink("http://www.experts-exchange.com/M_1539809.html", "Idle_Mind's Profile")
End Sub

Public Sub PasteLink(ByVal link As String, ByVal description As String)
    Const sContextStart As String = "<HTML><BODY><!--StartFragment -->"
    Const sContextEnd As String = "<!--EndFragment --></BODY></HTML>"
    Const m_sDescription As String = _
        "Version:1.0" & vbCrLf & _
        "StartHTML:aaaaaaaaaa" & vbCrLf & _
        "EndHTML:bbbbbbbbbb" & vbCrLf & _
        "StartFragment:cccccccccc" & vbCrLf & _
        "EndFragment:dddddddddd" & vbCrLf

    Dim sHtmlFragment As String = _
        "<A HREF=" & Chr(34) & link & Chr(34) & ">" _
        & description & "</A>"

    Dim sData As String = m_sDescription & sContextStart & sHtmlFragment & sContextEnd
    sData = sData.Replace("aaaaaaaaaa", m_sDescription.Length.ToString.PadLeft(10, "0"))
    sData = sData.Replace("bbbbbbbbbb", sData.Length.ToString.PadLeft(10, "0"))
    sData = sData.Replace("cccccccccc", (m_sDescription & sContextStart).Length.ToString.PadLeft(10, "0"))
    sData = sData.Replace("dddddddddd", (m_sDescription & sContextStart & sHtmlFragment).Length.ToString.PadLeft(10, "0"))

    Clipboard.SetDataObject(New DataObject(DataFormats.Html, sData))
End Sub

这也不起作用,这里的剪贴板基本上被设置为DataObject,但不起作用。

解释编辑:

我意识到,在这些人对此做出了不同的解释之后,对这个问题有了不同的解释。

我的应用程序正在生成一个签名,然后将其放入剪贴板,以便将其粘贴到GMAIL。

如果我在这里使用我的原始代码,会发生什么:

  1. 我试着粘贴在Gmail -空贴的签名部分。
  2. 我把这个粘贴在里面,或者MSWORD -粘贴好的。
  3. 然后我可以把这个粘贴到Gmail里。

因此,Gmail上的这个窗口一定发生了一些变化,因此它不再工作了,而且由于整个clipboard.settext模块的工作有点不正常,它产生了对这个问题的整个误解,使我发疯。

而且,德里克提供的代码似乎可以在Gmail签名窗口上工作,即使是在第一次设置中,我也需要重新设计我的功能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-24 17:40:04

你可以看看这对你有用吗。我经常用这个。

它看起来与你的非常相似,它是c#,但是你可以使用一个在线代码转换器。

代码语言:javascript
复制
   public void SetHyperlinkOnClipboard( string link, string description )
   {
      try
      {
         const string sContextStart = "<HTML><BODY><!--StartFragment -->";
         const string sContextEnd = "<!--EndFragment --></BODY></HTML>";
         const string m_sDescription = "Version:0.9" + Constants.vbCrLf + "StartHTML:aaaaaaaaaa" + Constants.vbCrLf + "EndHTML:bbbbbbbbbb" + Constants.vbCrLf + "StartFragment:cccccccccc" + Constants.vbCrLf + "EndFragment:dddddddddd" + Constants.vbCrLf;

         string sHtmlFragment = "<A HREF=" + Strings.Chr( 34 ) + link + Strings.Chr( 34 ) + ">" + description + "</A>";

         string sData = m_sDescription + sContextStart + sHtmlFragment + sContextEnd;
         sData = sData.Replace( "aaaaaaaaaa", m_sDescription.Length.ToString().PadLeft( 10, '0' ) );
         sData = sData.Replace( "bbbbbbbbbb", sData.Length.ToString().PadLeft( 10, '0' ) );
         sData = sData.Replace( "cccccccccc", ( m_sDescription + sContextStart ).Length.ToString().PadLeft( 10, '0' ) );
         sData = sData.Replace( "dddddddddd", ( m_sDescription + sContextStart + sHtmlFragment ).Length.ToString().PadLeft( 10, '0' ) );
         Clipboard.SetDataObject( new DataObject( DataFormats.Html, sData ), true );    
      }
      catch( Exception ex )
      {

      }
   }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45286635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档