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 actualHKEY_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
-
Adaptado de Wikipédia: http://pt.wikipedia.org/wiki/Registro_do_Sistema ↩
-
Para saber mais sobre o registo do Windows (em Inglês): http://en.wikipedia.org/wiki/Windows_Registry ↩