WinApi ShellExecuteEx - использование глагола «копировать» в списке файлов - PullRequest
2 голосов
/ 16 октября 2010

возможно ли использовать ShellExecuteEx для копирования или вырезания группы файлов в заданном каталоге?Функция Windows отлично работает с одним файлом, но я нигде не могу найти никаких подсказок по теме (со списком файлов).

Я не ожидаю альтернативного метода (такого как xcopy), потому что мне нужнофункция оболочки Windows отменяет / повторяет действия после выполнения действий, специфичных для элемента оболочки.

Это не документировано вообще в библиотеке Microsoft MSDN.Я попытался заполнить параметр 'lpfile' списком элементов, таких как PChar ("Drive: \ file1.fileExt", "Drive: \ file1.fileExt") и другой такой общий формат списка ... но ничего дляdo, shellExecuteEx возвращает значение <33. </p>

Есть ли такой глагол, как "select" или "addtoselection"?Должен ли быть добавлен флаг SEE_MASK_IDLIST, и в этом случае структура ITEMIDLIST способна определить список файлов, для которых будет выполняться глагол ShellExecuteEx?

Ответы [ 2 ]

1 голос
/ 17 октября 2010

Да, это возможно, но зачем выполнять внешнюю команду, если для этого в Windows API есть встроенные функции?Для операции копирования / вырезания я рекомендую использовать SHFileOperation () , Microsoft предоставила пример кода для этой цели.

В качестве альтернативы вы также можете использовать CopyFileEx () для копирования файлов и использование MoveFile () для перемещения файлов.Они быстрее чем SHFileOperation () .

0 голосов
/ 22 октября 2010

Вы правы, SHFileOperation чрезвычайно проще в использовании (по сравнению с shellexexuteex), однако поведение этой функции немного отличается.Если вы выполняете операцию SHFileOperation, например копирование или вырезание в приложении, если вы возвращаетесь непосредственно в проводник Windows, пункт контекстного меню «вставка» недоступен.Кажется, оболочка работает не так, как с whellexecuteex.С ShellExecuteEx, выполняемым в приложении и одним файлом, проводник напрямую включает элемент «вставка».

В любом случае, WinApi / ShellApi не очень понятно об этом, так как в итоге существует много способов скопировать файл (s): - SHellExecuteEx с глаголом 'copy' - SHFileOperation - ClipBoard: при имитации события удаления файла ...

Но в любом случае поведение элемента контекста оболочки отмены / возврата аналогично процессу проводника,- ShellExecuteEx хорошо включает функции отмены / повтора, но работает только с файлом синглов (или не документирован); - SHFileOperation позволяет работать со списком файлов (как вы говорили, разделенных # 0, в конце списка двойным # 0., НоКонтекстное меню SHell, по-видимому, не так глубоко, как ShellExecuteEx, связано с этой операцией. - Буфер обмена: также допускает список файлов, но не все действия (только копирование, а не вставка), потому что «вставка», скорее, является своего рода операцией перемещения с перетаскиванием., а не буфер обмена, даже если ShellApi указывает, что он немного похож ... они используют специальные структуры, которые нигде больше не используются ...

Синтез: это не совсем понятно.по крайней мере, 3 способа работы с файлами, но если мы говорим о списке файлов, это менее логично и даже кошмарно: вам приходится иметь дело со старой структурой, которую никто не использует, кроме трех парней из Microsoft, которые все еще работают над функциями оболочки... (или нет).

...