Como funcionam as associações

Como funcionam as associações

Tenho um problema com associações de arquivos. Meu aplicativo C# pode definir a associação de arquivo para sua própria extensão, para que os usuários cliquem duas vezes no arquivo de projeto usado para abrir meu aplicativo e carregar o arquivo.

Isso causa problemas com dois componentes de terceiros. Cada licenciamento de uso.

Ao usar o clique duplo, as caixas de diálogo de licença para ambos os componentes aparecem. Ao executar o aplicativo a partir do executável isso não acontece. Se eu arrastar o arquivo apropriado para o atalho do meu aplicativo, o aplicativo será iniciado com o arquivo e nenhuma caixa de diálogo de licença será exibida.

Portanto devo concluir que o problema está na forma como o Windows executa a ação de associação de arquivos.

As pessoas que criam o código de licença me disseram que o problema provavelmente é que o nome do executável foi alterado e o código de licença o rejeitou. Só posso presumir que isso está relacionado ao argumento que contém o nome do arquivo.

Tentei capturar a execução do código por meio de pontos de interrupção em meu código, mas não consigo fazer isso acontecer, mesmo que o ponto de interrupção esteja na primeira linha executada. O que quer que o Windows esteja fazendo, ultrapassa esse ponto.

Responder1

Como funcionam as associações

Quando você clica duas vezes em um arquivo no Windows Explorer, o shell do Windows procura a extensão do arquivo no registro para ver se a extensão está registrada. Se a extensão não estiver registrada, o Windows exibirá a caixa de diálogo Abrir com, permitindo ao usuário escolher um aplicativo para associar ao tipo de arquivo. Se a extensão estiver registrada, o Windows chama a função ShellExecute() com um comando “abrir”. Também passa o nome do arquivo que foi clicado duas vezes como parâmetro de linha de comando.

No entanto, as associações vão além de simplesmente abrir um arquivo. Se você clicar com o botão direito em um arquivo de texto (.TXT) no Explorer, verá dois itens na parte superior do menu de contexto. O primeiro é denominado Aberto. Escolher este item de menu é o mesmo que clicar duas vezes no arquivo no Explorer. Ao escolher Abrir, o NOTEPAD.EXE será iniciado com o arquivo selecionado carregado (assumindo uma instalação padrão do Windows). O segundo item do menu é chamado Imprimir. Clicar neste item de menu fará com que o arquivo seja impresso sem exibir o Bloco de Notas.

Outros tipos de arquivo exibem ainda mais itens no menu de contexto do Explorer. Se você clicar com o botão direito em um arquivo do Microsoft PowerPoint, por exemplo, verá itens do menu de contexto chamados Abrir, Novo, Imprimir e Mostrar. Os itens mostrados no menu de contexto para um tipo de arquivo específico são obtidos no registro.

Existem pelo menos duas maneiras de criar uma associação de arquivos no Windows. Uma maneira é clicar com o botão direito em um arquivo no Windows Explorer e escolher Abrir com… no menu de contexto. Ao fazer isso, o Windows exibirá a caixa de diálogo Abrir com. Naturalmente, este método requer intervenção do usuário. Ao implantar seu aplicativo, você provavelmente não desejará forçar seus usuários a configurar manualmente uma associação de arquivos.

A melhor maneira de criar uma associação é fazer várias entradas de registro no seu aplicativo. Um bom programa de instalação fará as entradas do registro para você, mas há momentos em que você precisa de mais controle sobre o processo.

Registrando uma associação

O registro de uma associação de arquivo requer a criação de duas chaves de registro separadas. Ambas as chaves são criadas na HKEY_CLASSES_ROOTseção do registro.

A chave de extensão de arquivo

A primeira chave é o nome da extensão do arquivo, precedido por um ponto.

HKEY_CLASSES_ROOT\.zzy

Em um aplicativo de produção, você deve verificar o registro para ter certeza de que não existe uma chave antes de tentar criar uma nova chave. Se a chave já existir, seu aplicativo precisará solicitar ao usuário que substitua a associação de arquivo ou estar preparado para usar uma extensão de arquivo completamente diferente.

O valor desta chave está vinculado à segunda chave que você criará. Na verdade, é o nome da segunda chave. Para o programa de exemplo, atribuí a essa chave o valor "Test App File". Esse valor pode ser qualquer um que você escolher, mas, como acontece com a primeira chave, você deve ter certeza de que a chave ainda não existe no registro.

A chave de associação do aplicativo

A segunda chave tem o mesmo nome que o valor padrão da primeira chave.

HKEY_CLASSES_ROOT\Test App File

Esta chave deve ter pelo menos uma subchave. O Windows usa essa subchave quando executa o aplicativo. A chave inteira está estruturada da seguinte forma:

HKEY_CLASSES_ROOT
  Test App File
    shell
      open
        command

A string fornecida à chave de comando é o caminho completo e o nome do arquivo do aplicativo seguido por% 1. Por exemplo:

C:\MyApp\MyApp.exe %1

Quando o Windows inicia o aplicativo, ele substitui o% 1símbolo com o caminho e o nome do arquivo que foi clicado duas vezes no Windows Explorer. Esse valor é passado para seu aplicativo como um parâmetro de linha de comando.

Chaves adicionais

Existem outras subchaves que você pode criar na chave de associação de arquivo. Uma dessas chaves é a DefaultIconchave. Esta chave é usada para especificar o ícone que o shell do Windows exibirá próximo aos arquivos dos tipos registrados. Esta chave não é necessária se você tiver apenas um tipo de arquivo registrado e se esse tipo de arquivo precisar usar o ícone do aplicativo. Veja como o valor da chave DefaultIcon procura uma associação que especifique o ícone padrão do aplicativo:

C:\MyApp\MyApp.exe,0

Isto especifica que o primeiro ícone encontrado no arquivo EXE do aplicativo deve ser usado como ícone de exibição da associação de arquivos. Se seu aplicativo tiver mais de um tipo de arquivo, você poderá especificar outros ícones alterando o índice do ícone após a vírgula. Por exemplo, o C++Builder possui ícones para um arquivo de projeto, um arquivo de formulário, um arquivo de origem e assim por diante. Se você olhar no registro abaixo, HKEY_CLASSES_ROOT\BCBProject\DefaultIconverá que o ícone de um arquivo de projeto é o índice de ícone 4 (para C++Builder 4, pelo menos).

Se quiser permitir que os usuários imprimam um documento, você pode adicionar uma subchave de impressão além da subchave aberta. O valor da subchave print é semelhante ao da subchave open, com uma exceção:

C:\MyApp\MyApp.exe /p %1

Observe que este valor tem uma opção de linha de comando de/pinserido entre o nome do aplicativo e o% 1símbolo. Seu aplicativo pode observar o/pswitch e tome as medidas apropriadas quando o switch for detectado.

Você pode adicionar quantas subchaves desejar para um tipo de arquivo específico. O nome de cada subchave aparecerá no menu de contexto do Explorer. Você só precisa adicionar uma opção de linha de comando para cada tipo de comando para que seu aplicativo possa identificar o item do menu de contexto que foi selecionado. Se você fornecer um valor padrão para a subchave, o Windows usará esse texto para o texto do item do menu de contexto. Se você não fornecer um valor padrão, o Windows usará o próprio nome da chave para o item de menu.

Todas as informações são obtidas desteartigo.

informação relacionada