Manipulação de parâmetro de nome de arquivo do Windows em ação de tipo de arquivo

1

Eu tenho uma ferramenta que eu adicionei à subchave shell da chave any-file em HKEY_CLASSES_ROOT para que ela apareça no menu do botão direito de qualquer arquivo (também tem isso no menu do diretório).

[HKEY_CLASSES_ROOT\*\shell\PathToClipboard]
@="Path -> Clipboard"

[HKEY_CLASSES_ROOT\*\shell\PathToClipboard\command]
@="C:\Program Files (x86)\PathToClipboard.exe %1"

A ferramenta não faz nada além de copiar o parâmetro fornecido (o caminho do arquivo) para a área de transferência.

Isso funcionou por pelo menos desde o Win ME (pode ter sido recompilado desde então). Ele também funciona para o win-7, mas com algumas peculiaridades: Se o caminho do arquivo contiver espaços ou outros caracteres não alfanuméricos, ele será reduzido ao nome de compatibilidade do DOS.

Por exemplo: C:\PROGRA~2\PATHTO~1.EXE

Existe alguma maneira de contornar isso?

Se eu colocar " em torno do %1 o caminho está correto, mas o Windows também passa o " para o programa (que eu não toquei bastante tempo. certeza que eu poderia resolver isso na ferramenta, mas eu gostaria de saber se o comportamento bruto poderia ser corrigido no lado do Windows).

    
por vlad_tepesch 16.02.2016 / 10:51

1 resposta

1

Se o nome do programa contiver espaços ou outros caracteres não alfanuméricos, é encurtado para o nome de compatibilidade do DOS.

@="C:\Program Files (x86)\PathToClipboard.exe %1"

As aspas devem estar ao redor das partes individuais, não da string completa.

Neste caso específico, você deve citar apenas a primeira parte (nome do programa) e a string inteira:

@="\"C:\Program Files (x86)\PathToClipboard.exe\" %1"

Nota:

  • \ é usado para escapar das cotações internas (aquelas ao redor do nome do programa)
  • Se você também citar o %1 (o caminho do arquivo), ele adicionará as aspas quando o caminho do arquivo for passado para o programa, portanto, não cite essa parte.
por 17.02.2016 / 11:40