Ir para o conteúdo

O registo do Windows – Colocar um programa no arranque do Windows

Entender o Registo do Windows

O Registo do Windows é um enorme repositório de dados, onde estão definidas todas as configurações necessárias para a execução do sistema operativo e aplicativos, bem como as informações necessárias para o correcto funcionamento do hardware1. O registo caracteriza-se por ser uma combinação de key/value, ou seja, na língua de Camões, chave/valor.

Cada key, pode ter n sub keys, e estas mesmas, conterem n sub keys , um pouco à semelhança que acontece com o sistema de pastas e sub pastas. Os valores das chaves podem ser de vários tipos, e actuam a vários níveis, ou seja, obedecem a uma determinada hierarquia e têm funções específicas.2

Adicionar um Programa ao Início do Windows

Como já foi referido, o objectivo do registo é guardar valores com determinada estrutura, que é reconhecida e interpretada pelo sistema operativo. Embora seja desaconselhado (deverá usar preferencialmente as settings), em última instância até poderemos guardar valores necessários para a nossa aplicação funcionar.

Mas voltemos ao tema do artigo: adicionar um programa ao Arranque do Windows. Estes programas poderão ser “colocados” em duas chaves distintas:

  • HKEY_Current_User
    Afecta o arranque na sessão actual
  • HKEY_Local_Machine
    Afecta o arranque em todas as sessões.

Como precaução, criei duas funções. Uma que adiciona, e outra que elimina o registo. Para o exemplo, esse registo vai ser adicionado apenas na minha sessão.

Nota: Não esquecer de fazer o imports no início do código:

 Imports Microsoft.Win32 

Função para Adicionar Chave

     ''' <summary>
       ''' <summary>
    ''' Adiciona um par Key-Value ao registo
    ''' </summary>
    ''' <param name="name">Nome da Key</param>
    ''' <param name="path">Valor da Key</param>
    ''' <remarks></remarks>
    Public Sub AddCurrentKey(ByVal name As String, ByVal path As String)
        Try
            Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
            key.SetValue(name, path)
        Catch ex As Exception
            MsgBox("Ocorreu um erro: " & ex.Message)
        End Try
    End Sub

Função para Eliminar Chave

  ''' <summary>
    ''' Remove uma Key do registo
    ''' </summary>
    ''' <param name="name">Nome da Key</param>
    ''' <remarks></remarks>
    Public Sub RemoveCurrentKey(ByVal name As String)
        Try
            Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
            key.DeleteValue(name, False)
        Catch ex As Exception
            MsgBox("Ocorreu um erro: " & ex.Message)
        End Try
    End Sub

Utilização Prática

        If ynRegistar Then
            AddCurrentKey("nome do meu programa", "c:\Programas\o_meu_programa\executavel.exe")
        Else
            RemoveCurrentKey("nome do meu programa")
        End If

Criei uma variável (ynRegistar), para o caso de o adicionar/remover estar dependente de determinada avaliação, e simultaneamente apresentar um exemplo de ambas as opções.

Importante: Atenção que só será possível efectuar alterações ao registo se tiver permissões de Administrador.

Exemplo Adaptado de http://www.dreamincode.net/forums/showtopic94010.htm


  1. Adaptado de Wikipédia: http://pt.wikipedia.org/wiki/Registro_do_Sistema 

  2. Para saber mais sobre o registo do Windows (em Inglês): http://en.wikipedia.org/wiki/Windows_Registry