将字节数组复制到剪贴板

5
我正在尝试编写一个客户端-服务器程序,其中可以共享剪贴板的内容。目前,如果内容类型为音频、图像或文本,则可以共享它。我的想法是将内容转换为字节数组,发送它,再将其转换回原始类型(StreamBitmapSourcestring),并使用方法Clipboard.SetAudioClipboard.SetImageClipboard.SetText在客户端剪贴板中注入它。
我的问题是当剪贴板中有一些文件时。我使用方法Clipboard.GetFileDropList获取文件列表,对于列表中的每个文件,我将其转换为字节数组并发送到客户端。如何将此字节数组注入客户端剪贴板?我知道有方法Clipboard.SetFileDropList,但它要求我提供文件列表,由于文件在客户端上不存在,所以我无法使用它。
我该如何解决这个问题?

1
如果没有更好的方法,您可以在临时文件夹中重新创建该文件,然后复制它。这就是Mouse Without Borders所做的,我认为这不是巧合。 - Kevin Gosse
1个回答

3
为了让客户端将文件视为可粘贴的,它们需要以某种方式存在于客户端文件系统中,因为剪贴板在设置剪贴板内容时期望获得文件名列表。可以通过将数据作为流传输到客户端,然后立即将客户端解压缩到临时文件夹中来完成此操作,可以通过以下方式获取该路径:
var temp = Environment.ExpandEnvironmentVariables("%TEMP%");

完成后,文件已就位,您可以将这些文件放置在剪贴板上,就像复制的那些文件一样。

请注意,支持文件复制/粘贴而不是具有“传输”文件选项可能比其他操作慢得多,因为文件可能变得非常大。


我曾考虑过使用这种方法,但我想知道是否有更好的方法。我的担忧是如果传输的文件很大,可能会浪费一些内存。无论如何,我会尝试实现你建议的方法。 - Nicola Gallo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接