【问题标题】:Clipboard.SetText(HTML) no longer workClipboard.SetText(HTML) 不再起作用
【发布时间】:2017-12-30 09:30:46
【问题描述】:

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

我找到了Clipboard HTML的文档并举了一个例子,做了下面的测试,它对我也不起作用。

 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

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

Clipboard.SetText(TextBox1.text, TextDataFormat.Html)

然后我为 StartHTML 等粘贴了带有仔细计算字节数的不同字符串...

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>

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

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

我想知道有人可以运行这段代码,看看我做错了什么,因为我在这里被取消了;我还在某处找到了这段代码:-

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 模块有些无法正常工作,它产生了对这个问题的整个误解,让我发疯了。

此外,Derek 提供的代码在设置内的 Gmail 签名窗口中也能正常工作,即使是第一次,我也需要重新设计我的功能。

【问题讨论】:

标签: c# .net vba clipboard


【解决方案1】:

你可以看看这是否适合你。我经常使用这个。

它看起来和你的很相似,它是 c#,但你可以使用在线代码翻译器。

   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 )
      {

      }
   }

【讨论】:

  • 没有翻译,我用 C# 创建了 Windows 窗体。使用SetHyperlinkOnClipboard("google.com", "google", true); 运行测试,但没有成功。我创建了一个 EXE 文件并在四台不同的不相关的计算机上运行。 2x W10 和 2x W7 也没有用。
  • 发生了什么?这可能取决于您要粘贴的内容。我使用您的示例粘贴到 onenote 中并且它有效。粘贴到 microsoft word 中,无效。
  • SetHyperlinkOnClipboard("https://www.google.com", "google" ); 在 microsoft word 中发出警告,然后工作。
  • 可能会在空白异常处理中添加一个消息框或 console.writeline。剪贴板和 sta / mta 线程周围有奇怪的东西。
  • 好的,您的示例中的代码似乎将 URL 粘贴到 Word 中,但是在 OneNote 上粘贴最新的文本,就像它从未被代码覆盖一样。
猜你喜欢
  • 2016-07-10
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2019-02-14
  • 2016-04-05
相关资源
最近更新 更多