Como adicionar um item de menu de contexto ao Windows Explorer para pastas [fechado]

100

Eu descobri como adicionar itens de menu de contexto do botão direito do mouse a arquivos no Windows Explorer, adicionando chaves ao registro. Ou seja, posso clicar com o botão direito em um arquivo no Explorer e executar um aplicativo personalizado nesse arquivo.

Eu gostaria de fazer o mesmo para uma pasta e não encontrei uma maneira de fazer isso (ainda). Vejo artigos sobre como criar / escrever manipuladores de menu de contexto personalizados, mas prefiro não ir lá.

Encontrei um artigo aqui sobre como adicionar itens de menu de contexto em cascata à área de trabalho e ao "Computador" no Explorer, mas isso não funciona para nenhuma pasta.

Gostaria de poder adicionar meu aplicativo personalizado ao menu de contexto e fazê-lo funcionar tanto em arquivos quanto em pastas. Existe uma maneira de fazer isso sem escrever um manipulador de menu de contexto?


Encontrei a solução no artigo abaixo, que descreve como fazer isso por meio do registro para arquivos, bem como para pastas:

Os dois artigos a seguir fornecem informações e opções adicionais:

Elan
fonte
1
Essa pergunta está aberta há 6 anos ?! Quem fechou há seis dias?
Andrew
A ÚNICA coisa que não gosto no StackOverflow são os palhaços fechando as perguntas ou marcando as perguntas como fora do tópico.
Michael

Respostas:

209

No editor de registro ( regedit.exe), encontre:

  • Menu de contexto para clicar com o botão direito nas pastas no painel esquerdo do Windows Explorer ou no fundo de um diretório no painel direito:

    1. HKEY_CLASSES_ROOT\Directory\Background\shell se você é administrador
    2. HKEY_CURRENT_USER\Software\Classes\directory\Background\shell se você é um usuário normal
  • Menu de contexto para clicar com o botão direito nas pastas no painel direito do Windows Explorer:

    1. HKEY_CLASSES_ROOT\Directory\shell se você é administrador
    2. HKEY_CURRENT_USER\Software\Classes\directory\shell se você é um usuário normal
  • Menu de contexto para qualquer arquivo:

    1. HKEY_CLASSES_ROOT\*\shell se você é administrador
    2. HKEY_CURRENT_USER\Software\Classes\*\shell se você é um usuário normal

Em todos os casos:

  1. adicione uma nova chave em shell, nomeando-a como deseja nomear o item do menu de contexto
  2. adicione uma nova chave dentro desta chave, chamada command(nome obrigatório)
  3. edite a defaultpropriedade em commandpara myprogrampath\path\path\executable.exe %1passar o caminho e o nome do arquivo selecionado para o seu programa personalizado

Mais personalização:

  • Adicionar ícone : adiciona um valor de string nomeado iconpara a chave criada na etapa 1 com o valor correspondendo a um caminho de recurso de ícone. Você também pode fornecer argumentos inteiros para especificar qual ícone usar. Exemplo:%SystemRoot%\System32\shell32.dll,3
  • Exibir apenas ao clicar com shift : adiciona um valor de string vazio nomeado Extendedpara a chave criada na etapa 1
  • Personalize a etiqueta de entrada do menu : altere o valor do valor padrão para a chave criada na etapa 1
  • Mudança de local de entrada do menu : adicione um valor de cadeia chamado Positioncom um dos seguintes: Top,Bottom
jumpjack
fonte
2
HKEY_CLASSES_ROOT\Directory\Background\shellsó pode afetar o clique com o botão direito no plano de fundo de um diretório
Amos
21
Deve ser "%1"caso o caminho tenha espaços.
Blrp
3
imediatamente. Não há necessidade de abrir uma nova janela do explorer: novas configurações são carregadas assim que você clica com o botão direito.
jumpjack de
1
parece que as variáveis ​​de ambiente não funcionam Command, não é?
Jack Lu
14
Em relação ao meu comentário anterior: O problema pode ser corrigido substituindo %1por %V.
Michael Herrmann
10

Voltei e também respondi isso em outro tópico, pois não parece haver muito sobre essa questão especificamente.

Descobri que a maneira mais simples era adicionar um valor de string à chave chamada "AppliesTo" e definir seu valor como "under: {path}"

No meu exemplo, eu quero que ele olhe apenas na unidade T, então meu valor String é "AppliesTo": "under: T:".

Em C #, isso é facilmente realizado com o seguinte:

RegistryKey _key = Registry.ClassesRoot.OpenSubKey("Folder\\Shell", true);
RegistryKey newkey = _key.CreateSubKey("My Menu Item");
newkey.SetValue("AppliesTo", "under:T:");

RegistryKey subNewkey = newkey.CreateSubKey("Command");
subNewkey.SetValue("", "C:\\yourApplication.exe");
subNewkey.Close();

newkey.Close();
_key.Close();
Bobby Byrnes
fonte
2
Obrigado por fornecer um código de amostra para fazer isso por meio de C #. É uma pequena ajuda para quem deseja fazer isso rapidamente a partir de um aplicativo.
Ayo I
2
Infelizmente, o valor "AppliesTo" não parece ter nenhum efeito em uma entrada "Directory \ Background". Alguém sabe como uma limitação semelhante pode ser realizada para clicar com o botão direito no fundo de uma pasta?
cl0rkster
6

Encontrou uma solução mais limpa, fácil e rápida: crie um arquivo de texto, preencha-o com este conteúdo, atualize-o de acordo com suas necessidades, salve com o sufixo .reg e execute-o (não precisa de privilégios de administrador porque acessa a parte do usuário do registro ):

Windows Registry Editor Version 5.00

; Setup context menu item for click on right panel:
[HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground\command]
@="C:\\yourpath\\executable.exe \"%1\""

; Optional: specify an icon for the item:   
; HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground]
;"icon"="C:\\yourpath\\appicon.ico"

; Optional: specify a position in the menu
; HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground]
;"position"="Bottom"

; -------------------------------------------------------------------------------------

; Setup context menu item for click on folders tree item:
[HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel\command]
@="C:\\yourpath\\executable.exe \"%1\""

; Optional: specify an icon for the item:   
; [HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel]
;"icon"="C:\\yourpath\\appicon.ico"

; Optional: specify a position in the menu
; [HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel]
;"position"="Top"

Desta forma, você também pode fazer um backup da sua configuração: basta salvar o arquivo .reg em um local seguro. Se você editar manualmente o registro após iniciar o arquivo, clique com o botão direito e selecione "exportar".

Cuidado com retrocessos duplos no caminho: \\

jumpjack
fonte
1

A única boa solução que encontrei realmente funcionando é: /superuser/1097054/shell-context-menu-registry-extension-doesnt-work-when-default-program-is-other

Adicione chaves em HKEY_CLASSES_ROOT \ SystemFileAssociations \ your.extension \ shell \ command Modifique a última chave com o comando que deseja fazer.

Para o meu propósito era:

"C:\Program Files (x86)\GPSBabel\gpsbabel.exe" -r -i gpx -f "%1" -x simplify,count=1000 -o gpx -F "%1.gpx"

Se eu exportar, recebo um .reg:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.gpx\shell\Simplify gpx\command]
@="\"C:\\Program Files (x86)\\GPSBabel\\gpsbabel.exe\" -r -i gpx -f \"%1\" -x simplify,count=1000 -o gpx -F \"%1.gpx\""
Dorian Grv
fonte
1

Abra o prompt de comando [executar como administrador] e execute este comando

reg add "HKEY_CLASSES_ROOT\Directory\shell\Refi2\command" /d "powershell.exe -noexit -command Set-Location -literalPath '%V'"
  • -d: valor a ser executado [nome do aplicativo exe].
  • -v: cria uma nova subchave dentro da chave de comando.
  • -f: para forçar a sobreposição da chave, se já existir.
  • powershell.exe -noexit -command Set-Location -literalPath '% V' em vez disso você pode especificar o caminho de seu exe .

Para obter mais detalhes sobre mais recursos, execute: -

reg add /?
Sahil Shikalgar
fonte