IDataObject или IStream в качестве источника копии оболочки - без расширения оболочки

У меня есть программа, которая передает файлы на компьютеры Windows (среди прочего). У нас есть два способа перевода:

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

Мы хотели бы получить диалоговое окно прогресса оболочки Windows с кнопкой отмены для метода 1.

Поэтому я хочу сделать копию оболочки, инициированную с помощью SHFileOperation (или IFileOperation), с источником моего IDataObject (или его IStreams) и целью папки на диске (которую я укажу).

У нас уже есть реализация IDataObject, которая предоставляет наши виртуальные файлы через CFSTR_FILEDESCRIPTOR, STGMEDIUM, IStream и т. Д. Это прекрасно работает. Мы хотели бы использовать как можно большую часть этой реализации.

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

У меня уже есть рабочий код для запуска окна обозревателя в целевой каталог, так что очевидным решением "последней инстанции" будет программный вызов операции перетаскивания, и у меня есть код, чтобы обмануть Windows, чтобы выполнить большую часть этого, но я бы предпочел не идти туда, если есть более элегантный (и более перспективный) метод, который я пропускаю. Есть идеи?

0 ответов

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