Как настроить буфер обмена для копирования файлов?
В моем приложении я разрешаю пользователю выбирать элементы, которые соответствуют файлам на диске. Когда пользователь нажимает 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
Если данные в вашем приложении не основаны на реальных файлах, я предлагаю вам сначала сгенерировать их как временные файлы во временной папке пользователя и добавить их в список файлов.