Fundo
Quando clico neste link, o Windows tenta abri-lo com um aplicativo. Isso ocorre porque o URI é estruturado como:
twitter://realDonaldTrump/status/266259787405225984
estando twitter
na posição de protocolo do link.
Quando clico neste link em um UWP do Windows 10 como 'Messenger', não consigo resolvê-lo porque o Windows o registra como um URI de aplicativo. O que faz sentido, mas gostaria de ter algum controle sobre esse comportamento.
Pergunta
Como posso adicionar um botão "Copiar URI para a área de transferência" à caixa de diálogo "Abrir com"? Veja abaixo uma imagem do que estou falando:
Não conheço uma maneira de adicionar isso à caixa de diálogo Abrir com, mas é possível que copiar o URI seja a ação padrão para esse protocolo. Isso é possível com alguma modificação do registro. Na maioria das vezes, as associações de arquivo e protocolo são exatamente o que você digitaria para executar algo na linha de comando.
As associações de arquivo e protocolo são armazenadas e lidas na
HKEY_CLASSES_ROOT
seção de registro. (Para obter mais informações sobre associações de arquivos, esta resposta pode ajudá-lo.)o
.reg
arquivoUma definição de protocolo muito simples para o que você deseja fazer está listada abaixo:
Copie isso em um arquivo chamado
twitter_protocol.reg
e clique duas vezes nele para importar para o seu registro.A explicação
Existem muitas opções que você pode especificar dentro dessas chaves. Os importantes no caso de uma associação de protocolo são:
HKEY_CLASSES_ROOT\<protocol>
- a string antes do://
.HKEY_CLASSES_Root\<protocol>
-(Default)
- a descrição do protocolo, por exemplo, "URL do Twitter".HKEY_CLASSES_ROOT\<protocol>
-URL Protocol
- especifica que esta é uma associação de protocolo e deve ser deixado em branco.HKEY_CLASSES_ROOT\<protocol>\shell\open\command
-(Default)
- especifica a linha de comando para abrir o aplicativo associado.Nesse caso, definimos a opção de linha de comando como
cmd /c ECHO|SET /P=%1|CLIP
, então vamos detalhar isso:cmd /c ...
abrirá uma janela de prompt de comando para executar seu comando.ECHO
eSET
são rotinas de linha de comando, em vez de aplicativos separados por conta própria, portanto, precisamos de um prompt de comando em execução para usá-lo.ECHO|SET /P=%1
é uma maneira excessivamente complicada de dizer "imprima a entrada sem uma nova linha extra no final".ECHO
por si só imprimirá tudo o que estiver escrito depois dele no prompt de comando e adicionará uma linha extra depois dele.|SET /P=
é um hack usado para remover a nova linha.SET
é normalmente usado para definir variáveis de ambiente, mas não o usamos para isso neste caso.|
é explicado abaixo.%1
é a entrada. Neste caso étwitter://realDonaldTrump/status/266259787405225984
.|
é chamado de "caractere pipe", o que significa que estamos pegando a saída do que vem antes dele e dando-o como entrada para o que vem depois dele.CLIP
irá ler a entrada do pipe (ao contrário de usar um argumento de linha de comando, que não suporta) e copiá-lo para a área de transferência.