2
我有一个程序,我需要能够从远程计算机复制和粘贴到我的本地计算机。为什么Clipboard.GetFileDropList()在远程桌面上返回一个空集合?
我的问题是,当我使用
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)的作品
- 复制/从局部与局部之间(通过代码)的作品
- 剪贴板共享粘贴激活
- OS(本地) :视窗10
- OS(远程):在Windows Server 2008 R2
当我尝试访问FileContents时,出现异常(CLIPBRD_E_BAD_DATA HRESULT:0x800401D3)(我正在使用GetData(“FileContents”))。我应该使用另一种方法吗? – user3399
不幸的是,.NET中'剪贴板“的实现并不能很好地支持这一点。您必须切换到非托管方法 - 通过P/Invoke或创建您自己的非托管模块。有关详细信息,请参阅[本主题](https://msdn.microsoft.com/zh-cn/library/windows/desktop/bb776904%28v=vs.85%29.aspx#filecontents)。 – dymanoid