.net 剪贴板元数据(或 Skype 报价使用的任何内容)

标签 .net vb.net skype

是否可以使用 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/

相关文章:

c# - 为 webClient.DownloadFile() 设置超时

c# - 在 .Net 中存储和显示日期时间的正确方法是什么?

vb.net - CheckedListBox 项目到 TextBox

c# - 在 RGB 和 HSB 颜色值之间切换的算法

javascript - 如何防止电话号码被转换成 Skype 链接?

c# - .NET 中的这种类型是什么(反射)

c# - 在 Selenium WebDriver 中启动 Chrome Headless 仍然会导致浏览器窗口空白

mysql - 单个查询中的多项选择,但有多个不同的字段名称

python - Skype4Py:不总是调用 messageStatusChanged

Android 程序-收到 Skype 消息时有反应吗?