2017-09-13 20 views
2

リモートコンピュータからローカルコンピュータにコピー&ペーストできる必要があるプログラムがあります。Clipboard.GetFileDropList()がリモートデスクトップ上で空のコレクションを返すのはなぜですか?

私の問題は、私は

Clipboard.GetDropList(); 

を使用する場合、それは関係なく、私がコピーしようとしたどのように多くの要素、0要素を持つコレクションを返しません、です。 Iはまた、(BoltBait's answer)を試み

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

私はそれを試し

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(); 

は、両方のバージョンは、空のコレクションを返します。

問題の原因はどこですか?それを知っ:

  • コピー/貼り付けをリモートからローカルに(窓経由する)が活性化される作品(コード経由)ローカル
  • クリップボードの共有へのローカルから
  • コピー/貼り付けを作品
  • OS(ローカル) :Windowsの10
  • OS(リモート):のWindows Server 2008 R2

答えて

0

あなたは空のコレクションをクリップボードにデータが含まれていないという事実である取得する理由私n DataFormats.FileDropフォーマット。

代わりに、リモートデスクトップを介してリモートマシン上の一部のファイルをコピーすると(クリップボードの共有が有効な間に)、ファイルの内容はクリップボードに直接配置されます。だから、理論的には、あなたは可能性が

  • CFSTR_FILECONTENTS
  • CFSTR_PREFERREDDROPEFFECT
  • -

    • FILEGROUPDESCRIPTOR(1秒実際には、FILEGROUPDESCRIPTORAまたはFILEGROUPDESCRIPTORW、お使いのシステム上の):クリップボードには、次の形式でデータが含まれていますFILEGROUPDESCRIPTORオブジェクトを繰り返し処理し、各ファイルをクリップボードからCFSTR_FILECONTENTSという名前で保存します。

      しかし、これはWindowsフォームの最初のファイルでのみ機能することを説明しているbug reportが見つかりました。したがって、ネイティブメソッドを呼び出すことによってP/Invokeを使用して実装する必要があります。

    +0

    FileContentsにアクセスしようとすると、例外が発生します(CLIPBRD_E_BAD_DATA HRESULT:0x800401D3)(GetData( "FileContents")を使用しています))。私は使用すべき別の方法がありますか? – user3399

    +0

    残念ながら、これは.NETの 'Clipboard'実装ではうまくサポートされていません。 P/Invokeを使用するか、独自のアンマネージドモジュールを作成することによって、アンマネージドアプローチに切り替える必要があります。詳細については、[このトピック](https://msdn.microsoft.com/en-us/library/windows/desktop/bb776904%28v=vs.85%29.aspx#filecontents)を参照してください。 – dymanoid

    関連する問題