Ferramentas de Utilizador

Ferramentas de Site


dev_net:vb.net:associar_extensoes

Associar extensões a aplicações

Introdução

O que faz com que o sistema operativo saiba exactamente que aplicação abrir quando tentamos executar um ficheiro não executável? O que faz com que o sistema operativo apresente um ícone diferente para cada diferente tipo de ficheiro? A resposta a estas perguntas é a associação de extensões. O sistema operativo sabe o que fazer pois esta informação é registada directamente no registo do sistema, local onde esta e muito mais outras informações residem para que tudo possa trabalhar tal e qual como hoje conhecemos.

O que precisamos?

Antes de querermos "ensinar" ao sistema operativo o que fazer a uma determinada extensão deveremos ter em conta um ponto muito importante: Estamos a determinar dois caminhos que não são dinâmicos. O ficheiro do ícone e o executável a associar têm de existir exactamente nos mesmos caminhos com que são registados. Visto isto, a melhor altura para registar um executável será na sua instalação ou primeira execução visto que o executável passa para a sua localização "definitiva" e este deverá fazer acompanhar-se do ícone. De volta à pergunta, apenas precisamos de um executável e de um ícone. Estipulemos para a aplicação "C:ProgramasA_Minha_AplicacaoApp.exe" e para o ícone "C:ProgramasA_Minha_AplicacaoApp.ico". Consideremos a extensão .WIKI como a extensão que queremos associar.

A prática na nossa realidade

Procurar extensões no registo

Este bloco é útil para evitar criar uma associação existente ou remover uma associação inexistente. Trata-se de um método que devolve um boolean para indicar que a extensão existe, ou não.

    Private Function ProcuraExtensao(ByVal Extensao As String) As Boolean
 
        For Each S As String In My.Computer.Registry.ClassesRoot.GetSubKeyNames
            If UCase(Extensao.Trim) = UCase(Replace(S, ".", "").Trim) Then
                Return True
            End If
        Next
 
        Return False
    End Function

Registar associação no registo

                Dim CaminhoExe As String = "C:ProgramasA_Minha_AplicacaoApp.exe"
                Dim CaminhoIco As String = "C:ProgramasA_Minha_AplicacaoApp.ico"
                Dim Extensao As String = "WIKI"
 
                My.Computer.Registry.ClassesRoot.CreateSubKey("." & Extensao).SetValue("", Extensao, Microsoft.Win32.RegistryValueKind.String)
                My.Computer.Registry.ClassesRoot.CreateSubKey(Extensao & "shellopencommand").SetValue("", CaminhoExe & " ""%l"" ", Microsoft.Win32.RegistryValueKind.String)
                My.Computer.Registry.ClassesRoot.CreateSubKey(Extensao & "DefaultIcon").SetValue("", CaminhoIco, Microsoft.Win32.RegistryValueKind.ExpandString)

Remover associação no registo

                Dim Extensao As String = "WIKI"
 
                My.Computer.Registry.ClassesRoot.DeleteSubKey("." & Extensao, False)
                My.Computer.Registry.ClassesRoot.DeleteSubKey(Extensao & "DefaultIcon", False)
                My.Computer.Registry.ClassesRoot.DeleteSubKey(Extensao & "shellopencommand", False)
                My.Computer.Registry.ClassesRoot.DeleteSubKey(Extensao & "shellopen", False)
                My.Computer.Registry.ClassesRoot.DeleteSubKey(Extensao & "shell", False)
                My.Computer.Registry.ClassesRoot.DeleteSubKey(Extensao, False)

Conclusão

Para efectuar uma associação de extensão com ícone, deveremos adicionar duas chaves em CLASSES_ROOT. Uma que serve como descrição da extensão, e outra para determinar, através de subchaves o ícone a utilizar e a aplicação a chamar.

Também é possível realizar esta associação através de ficheiros do registo. (*.REG)

Bloco para a chave de manifesto

[HKEY_CLASSES_ROOT.WIKI]
@="WIKI"

Bloco para as chaves de acções

[HKEY_CLASSES_ROOTWIKI]

[HKEY_CLASSES_ROOTWIKIDefaultIcon]
@=hex(2):43,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,61,00,73,
  00,5c,00,41,00,5f,00,4d,00,69,00,6e,00,68,00,61,00,5f,00,41,00,70,00,6c,00,
  69,00,63,00,61,00,63,00,61,00,6f,00,5c,00,41,00,70,00,70,00,2e,00,69,00,63,
  00,6f,00,00,00

[HKEY_CLASSES_ROOTWIKIshell]

[HKEY_CLASSES_ROOTWIKIshellopen]

[HKEY_CLASSES_ROOTWIKIshellopencommand]
@="C:ProgramasA_Minha_AplicacaoApp.Exe "%l" "
dev_net/vb.net/associar_extensoes.txt · Esta página foi modificada pela última vez em: 2018/05/14 21:37 (Edição externa)