WinApi ShellExecuteEx - использование глагола "копировать" в списке файлов
Можно ли использовать ShellExecuteEx для копирования или вырезания группы файлов в заданном каталоге? Функция Windows прекрасно работает с одним файлом, но я нигде не могу найти подсказок по теме (со списком файлов).
Я не ожидаю какого-либо альтернативного метода (такого как xcopy), потому что мне нужна функция отмены / повтора оболочки Windows после выполнения действий, специфичных для элемента оболочки.
Это вообще не задокументировано в библиотеке Microsoft MSDN. Я попытался заполнить параметр 'lpfile' списком элементов, таких как PChar("Drive:\file1.fileExt","Drive:\file1.fileExt") и другой такой общий формат списка... но ничего для do, shellExecuteEx возвращает значение < 33.
Есть ли такой глагол, как "выбрать" или "добавить выбор"? Должен ли быть добавлен флаг SEE_MASK_IDLIST, и в этом случае структура ITEMIDLIST способна определить список файлов, для которых будет выполняться глагол ShellExecuteEx?
2 ответа
Да, это возможно, но зачем выполнять внешнюю команду, если в Windows API есть встроенные функции для этого? Для операции копирования / вырезания я рекомендую использовать SHFileOperation (), Microsoft предоставила пример кода для этой цели.
Кроме того, вы также можете использовать CopyFileEx() для копирования файлов и MoveFile() для перемещения файлов. Они быстрее, чем SHFileOperation ().
Вы правы, SHFileOperation чрезвычайно проще в использовании (по сравнению с shellexexuteex), однако поведение этой функции немного отличается. Если вы выполняете операцию SHFileOperation, например копирование или вырезание в приложении, если вы возвращаетесь непосредственно в проводник Windows, пункт контекстного меню "вставить" недоступен. Похоже, что оболочка работает не так, как с whellexecuteex. Когда ShellExecuteEx выполняется в приложении и содержит один файл, проводник напрямую включает элемент "вставка".
В любом случае, WinApi/ShellApi не очень понятно об этом, потому что в итоге есть много способов скопировать файл (ы): - SHellExecuteEx с глаголом "copy" - SHFileOperation - ClipBoard: при имитации события удаления файла...
Но в любом случае поведение элемента контекста оболочки отмены / повтора похоже на процесс проводника. - ShellExecuteEx хорошо разрешают функции отмены / повторения, но работают только с файлом синглов (или не документированы); - SHFileOperation позволяет работать с списком файлов (как вы говорили, разделенных #0, заканчивать список двойным #0., Но Контекстное меню SHell, по-видимому, не так глубоко, как ShellExecuteEx, связано с этой операцией. - Буфер обмена: также разрешает список файлов, но не все действия (только копирование, а не вставка), потому что "вставка", скорее, является своего рода операцией перемещения с перетаскиванием., а не буфер обмена, даже если ShellApi указывает, что он немного похож... они используют специальные структуры, которые больше нигде не используются...
Синтез: это не совсем понятно. API для Windows предоставляет по крайней мере 3 способа работы с файлами, но если мы говорим о списке файлов, это менее логично и даже кошмарно: вам приходится иметь дело со старой структурой, которую никто не использует, кроме трех парней из Microsoft, которые все еще работает над функциями оболочки... (или нет).