是否可以使用 Clipboard 类从剪贴板获取所有数据,例如完整的 Skype 引号?我认为他们使用某种元数据,这就是它如何知道某物何时是引用的方式。
如何从 Clipboard 类访问它?我应该调用哪些函数来设置/恢复 Skype 报价?
感谢您的帮助!
Imports System.IO
Imports System.Text
Public Class Form1
Dim locale As New MemoryStream()
Private Sub l() Handles MyBase.Load
Dim strr As New StreamReader(CType(Clipboard.GetData("SkypeMessageFragment"), System.IO.Stream))
locale = Clipboard.GetData("locale")
TextBox1.Text = strr.ReadToEnd()
For Each x In Clipboard.GetDataObject().GetFormats()
'MessageBox.Show("Format " + x + ": " + Clipboard.GetData(x).ToString)
Next
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Clipboard.Clear()
Clipboard.SetData("SkypeMessageFragment", StreamFromString(TextBox1.Text))
Clipboard.SetData("Text", "testing")
Clipboard.SetData("System.String", "testing")
Clipboard.SetData("UnicodeText", "testing")
Clipboard.SetData("OEMText", "testing")
Clipboard.SetData("locale", locale)
End Sub
Private Shared Function StreamFromString(ByVal s As String) As Stream
Dim encoding As New System.Text.UnicodeEncoding()
Dim mem As New MemoryStream(encoding.GetBytes(s))
Return mem
End Function
End Class
最佳答案
我知道这个已经很旧了,但我找到了应该让您走上正轨的代码:
首先检索剪贴板:
var dataObj = Clipboard.GetDataObject();
var formats = dataObj.GetFormats();
然后您检索其数据:
var sysString = dataObj.GetData("System.String");
var unicode = dataObj.GetData("UnicodeText");
var text = dataObj.GetData("Text");
var oemText = dataObj.GetData("OEMText");
var msgFragment = dataObj.GetData("SkypeMessageFragment") as MemoryStream;
var msg = new StreamReader(msgFragment).ReadToEnd();
然后创建一个新的 DataObject 来保存引用并将其设置到剪贴板:
DataObject dataObj = new DataObject();
DateTime time = DateTime.UtcNow;
string msg = "This is a Konloch message";
string msgInText = string.Format("[{0}] {1}: {2}", time.ToString("0:hh:mm:ss"), "konloch.me", msg);
string msgInXml = string.Format("<quote author=\"{0}\" timestamp=\"{1}\">{2}</quote>", "konloch.me", time, msg);
dataObj.SetData("System.String", msgInText);
dataObj.SetData("UnicodeText", msgInText);
dataObj.SetData("Text", msgInText);
dataObj.SetData("OEMText", msgInText);
dataObj.SetData("SkypeMessageFragment", new MemoryStream(Encoding.UTF8.GetBytes(msgInXml)));
Clipboard.SetDataObject(dataObj, true);
对原作者的赞美: http://pastebin.com/RygFN7xQ
干杯!
关于.net 剪贴板元数据(或 Skype 报价使用的任何内容),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2741433/