是否可以使用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
答案 0 :(得分:3)
我知道这个人已经很老了,但我发现代码可以让你走上正轨:
首先检索剪贴板:
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
干杯!
答案 1 :(得分:2)
如果您不知道格式,那么您将不得不进行实验。首先迭代并显示可用的格式,使用Clipboard.GetDataObject()。GetFormats()。这些是字符串,你可能会认出一些东西。您可以将其中一个传递给Clipboard.GetData(),您将获得一个不透明的对象。把它放在一个监视表达式中,也许调试器可以理解它。
如果Skype使用剪贴板供自己使用,那么你几乎没有希望可以挖出任何可用的东西。如果它打算向常见的应用程序(如MS Word)提供剪贴板数据,而没有某种加载项,那么会有很多希望。