如何在剪贴板中复制二进制数据?例如,如果我将数字1打包为4字节的小端整数,我希望我的剪贴板显示00 00 00 01
对于文本数据,这是微不足道的,可以选择使用unicode文本或ascii文本.
Clipboard.SetData(DataFormats.Text, "Some text");
Clipboard.SetData(DataFormats.UnicodeText, "?");
Run Code Online (Sandbox Code Playgroud)
但是对于二进制数据,我不知道该怎么做.
实际上有两种方法可以做到这一点:
第一个,到目前为止最简单的一个:你只需将字节数组放入剪贴板.这将自动序列化字节数组,并在检索时反序列化它,您需要做的就是检查typeof(Byte[]).实际上,这适用于任何可序列化类型(并且您可以使用该[Serializable]属性使您自己的类可序列化).
放在剪贴板上:
public void PutBytesOnClipboardObj(Byte[] byteArr)
{
DataObject data = new DataObject();
// Can technically just be written as "SetData(byteArr)", but this is more clear.
data.SetData(typeof(Byte[]), byteArr);
// The 'copy=true' argument means the data will remain available
// after the program is closed.
Clipboard.SetDataObject(data, true);
}
Run Code Online (Sandbox Code Playgroud)
从剪贴板中检索:
public byte[] GetBytesFromClipboardObj()
{
DataObject retrievedData = Clipboard.GetDataObject() as DataObject;
if (retrievedData == null || !retrievedData.GetDataPresent(typeof(Byte[])))
return null;
return retrievedData.GetData(typeof(Byte[])) as Byte[];
}
Run Code Online (Sandbox Code Playgroud)
如果你绝对希望它作为纯原始字节在那里,另一种可能性是将它作为MemoryStream放在剪贴板上.DataFormats列表中没有特定的类型,但由于列出的数据格式只是字符串,您可以自己编写.我在下面的例子中使用了"rawbinary".
放在剪贴板上:
public void PutBytesOnClipboardRaw(Byte[] byteArr)
{
DataObject data = new DataObject();
using (MemoryStream memStream = new MemoryStream())
{
memStream.Write(byteArr, 0, byteArr.Length);
data.SetData("rawbinary", false, memStream);
// The 'copy=true' argument means the MemoryStream
// can be safely disposed after the operation.
Clipboard.SetDataObject(data, true);
}
}
Run Code Online (Sandbox Code Playgroud)
从剪贴板中检索:
public Byte[] GetBytesFromClipboardRaw()
{
DataObject retrievedData = Clipboard.GetDataObject() as DataObject;
if (retrievedData == null || !retrievedData.GetDataPresent("rawbinary"))
return null;
MemoryStream byteStream = retrievedData.GetData("rawbinary") as MemoryStream;
if (byteStream == null)
return null;
return byteStream.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
第二种类型通常用于自定义格式; 例如,Office剪贴板将图像作为PNG字节流(标识符为"PNG")放入剪贴板,因为标准剪贴板图像类型缺乏透明度支持.
| 归档时间: |
|
| 查看次数: |
2405 次 |
| 最近记录: |