Clipboard.SetText(HTML) 不再有效
Clipboard.SetText(HTML) no longer work
我有一个代码,它在 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
应用程序,在 运行 上面的代码 returns 之后,类似于 "Can't make description and title"
我想知道有人可以 运行 这段代码看看我做错了什么,因为我在这里被取消了;我还在某处找到了这段代码:-
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。
如果我在这里使用我的原始代码会发生什么:
我尝试在 Gmail 的签名部分粘贴 - 什么都没有粘贴
我把这个粘贴进去或者MSWORD - 粘贴OK
然后我可以将其粘贴到 Gmail 中。
所以 Gmail 上的这个 window 一定发生了一些变化,所以它不再工作了,而且由于整个 clipboard.settext 模块有点不能正常工作,所以它产生了对驱动问题的整个误解我疯了。
此外,Derek 提供的代码似乎在设置中的 Gmail 签名 windows 上运行,即使是第一次,我也需要重新设计我的功能。
您可以看看这是否适合您。我经常使用它。
它看起来和你的非常相似,它是 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 )
{
}
}
我有一个代码,它在 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
应用程序,在 运行 上面的代码 returns 之后,类似于 "Can't make description and title"
我想知道有人可以 运行 这段代码看看我做错了什么,因为我在这里被取消了;我还在某处找到了这段代码:-
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。
如果我在这里使用我的原始代码会发生什么:
我尝试在 Gmail 的签名部分粘贴 - 什么都没有粘贴
我把这个粘贴进去或者MSWORD - 粘贴OK
然后我可以将其粘贴到 Gmail 中。
所以 Gmail 上的这个 window 一定发生了一些变化,所以它不再工作了,而且由于整个 clipboard.settext 模块有点不能正常工作,所以它产生了对驱动问题的整个误解我疯了。
此外,Derek 提供的代码似乎在设置中的 Gmail 签名 windows 上运行,即使是第一次,我也需要重新设计我的功能。
您可以看看这是否适合您。我经常使用它。
它看起来和你的非常相似,它是 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 )
{
}
}