gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:32:42 25 4
gpt4 key购买 nike

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

我的问题是,当我使用

Clipboard.GetDropList();

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

我尝试过:

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

我也试过(BoltBait's answer):

System.Collections.Specialized.StringCollection idat = null;
Exception threadEx = null;
Thread staThread = new Thread(
delegate ()
{
try
{
idat = Clipboard.GetFileDropList();
}
catch (Exception ex)
{
threadEx = ex;
}
});
staThread.SetApartmentState(ApartmentState.STA);
staThread.Start();
staThread.Join();

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

问题可能来自哪里?知道:

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

最佳答案

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

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

因此理论上您可以尝试遍历 FILEGROUPDESCRIPTOR 对象并存储从剪贴板读取其 CFSTR_FILECONTENTS 的每个文件。

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

关于c# - 为什么 Clipboard.GetFileDropList() 在远程桌面上返回一个空集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com