Я бы сказал, что проводник сам выполняет копирование в файлы назначения, поэтому нет возможности напрямую записать файлы назначения. Это имеет смысл, поскольку имена исходных файлов могут поступать только из приложения, которое скопировало данные в буфер обмена, который не обязательно должен быть проводником. OTOH имена файлов назначения могут фактически отличаться, потому что файлы с тем же именем могут уже существовать в папке назначения, и только проводник может создавать измененные имена для файлов назначения (например, добавляя «Копия» или добавляя « 2) "к основному имени файла).
Вам нужно будет предоставить формат буфера обмена для проводника Windows, чтобы он мог вставлять файлы. Документация стандартных форматов буфера обмена предполагает, что CF_HDROP является правильным. В этом формате буфера обмена вы предоставляете список имен исходных файлов, но файлы, конечно, должны существовать, поэтому вам потребуется , чтобы сохранить их на диск.
Вы можете попытаться сделать процесс как можно более легким. Обычно, когда пользователь копирует данные в буфер обмена, они немедленно помещаются туда, независимо от того, будут ли они использоваться для операции вставки. Для вашего приложения это будет означать, что вам нужно будет каждый раз создавать файлы и помещать список имен файлов в буфер обмена. Однако Windows поддерживает режим с именем Delayed Rendering , который используется именно для таких случаев. По сути, вы помещаете в буфер обмена только пустую заглушку данных, и только когда другое приложение пытается получить доступ к данным, оно будет запрошено вашим приложением. Таким образом, вы можете реализовать это так, что только когда пользователь попытается вставить файлы в проводник, вы сохраните их на диск и вернете список имен файлов.