2012-02-21 3 views
1

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

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

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

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

ответ

3

Самый простой способ - связать ваше приложение с глаголом оболочки по умолчанию (например, «открыть» или «воспроизвести») для типа файла и реализовать цель удаления, использующую SHCreateShellItemArrayFromDataObject для получения выбранных файлов. Рекомендуемое чтение: How the Shell Invokes Verbs

Если вы не любите брать на себя глагол по умолчанию, вы можете добавить свой глагол в ассоциацию файлов open with list.

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

+0

(Недостаточно места в этих комментариях, поэтому я разделил его на три): Первый абзац: Dont 'get it. Извините, я не разработчик Windows. Мое приложение не зависит от платформы и написано на Java. Это всего лишь EXE-файл, который открывает все файлы, которые были указаны как аргументы командной строки. Не знаю, что такое SHCreateShellItemArrayFromDataObjet и как я могу это сделать в Java. И насколько я знаю, я уже использую глагол оболочки по умолчанию («open» в этом случае). – kayahr

+0

Второй абзац: я пробовал этот OpenWithList, но он не работает, и в документации говорится, что это для регистрации нескольких приложений для одного и того же типа файла. Это не то, что мне нужно. Я уже связал свое приложение с типом файла, и оно работает. Я просто не хочу, чтобы Windows открывала мое приложение несколько раз, когда я открывал список файлов за один раз. – kayahr

+0

Третий абзац: В моем вопросе я написал, что хочу избежать этой проблемы, но если Windows действительно не сможет передать список файлов программе, я должен сделать это вот так. – kayahr

0

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

+0

Пробовал это. Не работает. Он пуст. И когда я использую «% *» (с кавычками), программа пытается открыть файл с пустым именем файла. – kayahr