我有一个我写的小程序,它位于系统托盘中,单击后将打印特定应用程序的选定文本(由用户突出显示)。这个位工作正常,我可以把它打印出来,但它失去了格式。
我已经搜索了这个景象,还有很多其他人试图找出如何设置复制数据的格式属性,但结果都是空的。
这是我目前使用的代码:-
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim hWnd As IntPtr = FindWindow("putty", Nothing)
EnableWindow(hWnd, True)
Clipboard.Clear()
SendKeys.Send("^c")
If Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) Then
RichTextBox1.Text = Clipboard.GetDataObject().GetData(DataFormats.Text) '.ToString()
Else
RichTextBox1.Text = "The clipboad does not contain any text"
End If
RichTextBox1.Paste()
Dim result As DialogResult = PrintDialog1.ShowDialog()
' If the result is OK then print the document.
If (result = DialogResult.OK) Then
docToPrint.Print()
End If
End Sub
基本上,我只想让它对所选文本进行一种快照并打印出来。
我们曾经使用NetadminTools.com上的Clip.exe,但我无法在Windows 8上使用它。
您只能从putty中获得纯文本,所以我不确定您在这里期待什么。但是CF_TEXT剪贴板格式(大概是您请求DataFormats.TEXT时得到的格式)不包含任何格式。只是文本。如果您需要字体、页边距、粗体/斜体/下划线、颜色等,则需要CF_RTF或CF_HTML,或其中一种OLE格式。CF_RTF是一种"专用"剪贴板格式,因此您必须注册它才能使用它。开始在MSDN上阅读有关剪贴板格式的信息:https://msdn.microsoft.com/en-us/library/windows/desktop/ms649013%28v=vs.85%29.aspx
在进一步搜索后,我发现了以下帖子:
如何在不丢失内容格式VB.NET 的情况下将RTF文件加载到RichTextBox
我注意到他们使用了RichTextBox1.Rtf而不是RichTextBox1.文本。我一改变这一点,一切就正常了。