看一下这张图片:
通过复制skype列表中的一个联系人生成屏幕截图。数据包含原始字节,其中包含skype显然有用的信息(在这种情况下,联系人名称以及名称的大小)。
我想自己完成这个。
这是我尝试复制到剪贴板时使用的代码
byte[] bytes = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
Clipboard.SetData("My Data", bytes);
哪个会复制到剪贴板。但是,我得到一个DataObject条目以及一些额外的数据,而不仅仅是原始字节:
上半部分是我看到的。下半部分是我截取屏幕的截图。请注意,它只是原始位图数据。
这可以在.NET中完成吗?
答案 0 :(得分:5)
额外字节是序列化标头。请参阅Clipboard
课程(强调我的)MSDN文档中的note:
对象必须是可序列化的,才能将其放在剪贴板上。如果 您将一个不可序列化的对象传递给Clipboard方法,该方法 没有抛出异常就会失败。看到 System.Runtime.Serialization有关序列化的更多信息。 如果 你的目标应用程序需要一个非常具体的数据格式, 在序列化过程中添加到数据的标题可能会阻止 识别您的数据的应用程序。要保留您的数据格式, 将您的数据作为Byte数组添加到MemoryStream并传递 MemoryStream到SetData方法。
所以解决方案就是这样做:
byte[] bytes = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
MemoryStream stream = new MemoryStream(bytes);
Clipboard.SetData("My Data", stream);