为什么Clipboard.GetFileDropList()在远程桌面上返回一个空集合?

时间:2017-09-13 09:38:56

标签: c# clipboard remote-desktop

我有一个程序,我需要能够从远程计算机复制并粘贴到我的本地计算机。

我的问题是,当我使用

 val httpConf = http
        .baseURL("http://192.168.1.30:8080")
 .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
            .acceptEncodingHeader("gzip, deflate")
            .acceptLanguageHeader("en-US,en;q=0.5")
            .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0")

val scn = scenario("SCENARIO2")
.exec(http("open")
  .get("/")
  .check(header("Location").saveAs("url")))
.exec(session => {
  val urlN = session.get("url").asOption[String]
  print(urlN.getOrElse("nothing"))
  session
})

它返回一个包含0个元素的集合,无论我尝试复制多少元素。

我尝试过:

Clipboard.GetDropList();

我也试过(BoltBait's answer):

if (Clipboard.ContainsFileDropList())
{
    foreach (string item in Clipboard.GetFileDropList())
    {
        File.Copy(item, path + '\\' + Path.GetFileName(item));
    }
}

两个版本都返回一个空集合。

问题出在哪里?知道:

  • 从远程复制/粘贴到本地(通过Windows)工作
  • 从本地复制/粘贴到本地(通过代码)工作
  • 激活剪贴板共享
  • OS(本地):Windows 10
  • 操作系统(远程):Windows Server 2008 R2

1 个答案:

答案 0 :(得分:1)

您获得空集合的原因是剪贴板不包含DataFormats.FileDrop格式的任何数据。

相反,在通过远程桌面复制远程计算机上的某些文件时(启用剪贴板共享时),文件内容将直接放在剪贴板中。剪贴板将包含以下格式的数据:

理论上,您可以尝试遍历FILEGROUPDESCRIPTOR个对象,并将每个文件从剪贴板中存储为CFSTR_FILECONTENTS

但我发现bug report描述了这只适用于Windows窗体中的第一个文件。因此,您必须通过调用本机方法使用P / Invoke实现它。