Как передать несколько связанных файлов в программу? - PullRequest
1 голос
/ 21 февраля 2012

Я написал программное обеспечение для Windows и связал расширение файла с этой программой. Когда я дважды щелкаю файл данных, моя программа запускается и открывает файл. Пока это работает. Но когда я выбираю несколько файлов и затем нажимаю «Открыть» в контекстном меню, запускаются несколько экземпляров моей программы, один экземпляр для одного файла. Я хочу, чтобы Windows открывала ВСЕ файлы с одним экземпляром моей программы. Возможно ли это без реализации обработчика с одним экземпляром в моей программе?

В настоящее время MyFileType/shell/open/command в реестре выглядит так:

"C:\Program Files\MyApp\MyApp.exe" "%1"

Может быть, есть какой-то специальный токен / переменная, которую я должен использовать вместо "% 1", чтобы он заработал? В Linux я должен использовать% f для одного файла и% F для списка файлов. Есть ли что-то похожее на Windows?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Самый простой способ - связать ваше приложение с глаголом оболочки по умолчанию (например, «open» или «play») для типа файла и реализовать целевой объект перетаскивания, который использует SHCreateShellItemArrayFromDataObject для получения выбранных файлов. Предлагаемое прочтение: Как оболочка вызывает глаголы

Если вы не хотите использовать глагол по умолчанию, вы можете добавить свой глагол в ассоциации файлов, открытой со списком .

Другой метод - сделать ваше приложение одиночным и отправить путь документа в первый экземпляр с помощью методов межпроцессного взаимодействия, таких как DDE или RPC. Это требует, чтобы ваше главное окно реагировало (например, не будет работать, если вы показываете диалог)

0 голосов
/ 22 февраля 2012

% * может быть то, что вы ищете.

...