Como posso criar um item de menu de contexto de shell que usa vários arquivos como argumentos?

10

É fácil criar um item de menu de contexto do Shell do Windows que use um único arquivo como argumento. Veja esta questão para um exemplo.

No entanto, como você cria um item de menu de contexto que usa vários arquivos como argumentos? Diga, para uma ferramenta diff-merge (no meu caso, P4Merge), embora a mesma técnica seja, sem dúvida, aplicável a outras aplicações também.

Eu instalei o P4Merge, mas ele não adiciona um item ao menu de contexto automaticamente, então terei que fazer isso manualmente.

Quando tentei usar:

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

como linha de comando, recebi um erro:

Errors: At least two files are needed. Cannot open only one file. P4Merge needs 0, 2, or 3 files.

Quando tentei usar:

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

como linha de comando, ele abriu duas instâncias do P4Merge, uma para cada arquivo.

Parece que os nomes dos arquivos corretos estão sendo passados para% 0 e% 1, mas uma instância diferente do aplicativo P4Merge está sendo executada para cada um.

Atualmente tenho a ferramenta DiffMerge do SourceGear, que tem um item no menu de contexto do Shell e funciona lindamente, pois eu posso selecionar dois arquivos e usar o item de menu de contexto para executar um diff neles. Eu estou tentando procurar o registro para ver quais argumentos DiffMerge usa, mas não consegui encontrar uma linha de comando DiffMerge que incluiu argumentos.

    
por SimonTewsi 18.05.2012 / 08:32

3 respostas

17

Você também pode tentar adicionar o programa ao menu Enviar para.

    
por 26.07.2012 / 03:42
3

Procurando pela resposta, parece que não há nenhuma correção simples e que é necessária uma extensão do shell. Olhando novamente para as entradas do registro para DiffMerge, parece usar uma extensão do shell: DiffMergeShellExtension64.dll. Se o P4Merge não tiver essa extensão de shell, parece que a única maneira que eu poderia fazê-lo funcionar corretamente no menu de contexto do Windows Explorer seria escrever um eu mesmo.

O Guia do Idiota Completo para Escrever Extensões Shell série no Code Project é um guia útil para escrever extensões de shell. Parte II da série é sobre como escrever uma extensão que lida com vários arquivos de uma só vez (exatamente o que eu preciso).

Aviso: O Guia do Idiota Completo para Escrever Extensões Shell usa C e COM, ATL (Biblioteca de Modelos Ativos) e MFC (Microsoft Foundation Classes). Então escrever uma extensão de shell, se você não estiver familiarizado com essas tecnologias, será um processo longo e potencialmente difícil; definitivamente não é algo que você possa fazer em uma hora.

    
por 22.05.2012 / 03:50
2

Você pode fazer isso com meu programa launcher de menu de contexto (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"
    
por 26.07.2015 / 14:13