10

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

Тем не менее, как вы создаете пункт контекстного меню, который принимает несколько файлов в качестве аргументов? Скажем, для инструмента diff-merge (в моем случае P4Merge), хотя та же методика, без сомнения, будет применима и для других приложений.

Я установил P4Merge, но он не добавляет элемент в контекстное меню автоматически, поэтому мне придется делать это вручную.

Когда я пытался использовать:

"C:\Program Files\Perforce\p4merge.exe" %1 %2

в командной строке я получил ошибку:

Ошибки: необходимы как минимум два файла. Невозможно открыть только один файл. P4Merge требуется 0, 2 или 3 файла.

Когда я пытался использовать:

"C:\Program Files\Perforce\p4merge.exe" %0 %1

в качестве командной строки он открыл два экземпляра P4Merge, по одному для каждого файла.

Похоже, что правильные имена файлов передаются в% 0 и% 1, но для каждого из них выполняется отдельный экземпляр приложения P4Merge.

В настоящее время у меня есть инструмент SourceGear DiffMerge, у которого есть пункт в контекстном меню оболочки и который прекрасно работает, так как я могу выбрать два файла и использовать пункт контекстного меню для запуска сравнения с ними. Я пытаюсь найти в реестре аргументы DiffMerge, но не могу найти командную строку DiffMerge, в которой есть аргументы.

3 ответа3

17

Вы также можете попробовать добавить программу в меню SendTo.

3

Просматривая ответ, кажется, что простого решения не существует и требуется расширение оболочки. Еще раз заглядывая в записи реестра для DiffMerge, он, похоже, использует расширение оболочки: DiffMergeShellExtension64.dll. Если у P4Merge нет такого расширения оболочки, то похоже, что единственный способ заставить его работать правильно в контекстном меню Windows Explorer - это написать его самостоятельно.

Полное идиотское руководство по написанию расширений оболочки в Code Project - полезное руководство по написанию расширений оболочки. Вторая часть серии посвящена написанию расширения, которое обрабатывает несколько файлов одновременно (именно то, что мне нужно).

Предупреждение: полное руководство идиота по написанию расширений оболочки использует C и COM, ATL (Active Template Library) и MFC (классы Microsoft Foundation). Поэтому написание расширения оболочки, если вы не знакомы с этими технологиями, будет долгим и потенциально трудным процессом; это определенно не то, что вы можете сделать за час.

2

Вы можете сделать это с помощью моей программы context-menu-launcher (singleinstance):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge]
"MultiSelectModel"="Player"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge\Command]
@="\"d:\\singleinstance.exe\" %1 \"C:\\Program Files\\Perforce\\p4merge.exe\" $files --si-timeout 400"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .