Как настроить буфер обмена для копирования файлов?

В моем приложении я разрешаю пользователю выбирать элементы, которые соответствуют файлам на диске. Когда пользователь нажимает Ctrl+C, я хочу, чтобы файл был отправлен в буфер обмена, где пользователь может затем вставить файл в другое место.

Я хочу реализовать это таким образом, чтобы пользователь мог копировать, но не вставлять в мое приложение. Затем пользователь может свободно вставить файл в экземпляры Explorer или других приложений, которые будут принимать файл из буфера обмена.

Я знаю, как установить информацию в буфере обмена, но не знаю, как настроить ее так, чтобы Windows распознала ее как операцию копирования для определенных файлов.

Как я могу сделать это?

2 ответа

Решение

Чтобы поймать CTRL + C, вы можете проверить нажатие клавиш на событии KeyPress. И для копирования файла (ов) используйте что-то похожее на приведенное ниже:

private void CopyFile(string[] ListFilePaths)
{
  System.Collections.Specialized.StringCollection FileCollection = new System.Collections.Specialized.StringCollection();

  foreach(string FileToCopy in ListFilePaths)
  {
    FileCollection.Add(FileToCopy);
  }

  Clipboard.SetFileDropList(FileCollection);
}

Просто используйте класс Clipboard:
http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx

Используйте метод SetFileDropList, чтобы Windows распознала его как операцию копирования:
http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.setfiledroplist.aspx

Если данные в вашем приложении не основаны на реальных файлах, я предлагаю вам сначала сгенерировать их как временные файлы во временной папке пользователя и добавить их в список файлов.

Другие вопросы по тегам