Macoratti .net  -  Acessando o registro do Windows


O registro do Windows

Os arquivos de configuração de perfil - INI files , e o registro do Windows tem um papel importante na atuação do sistema operacional, pois é nestes arquivos que o sistema vai buscar as informações armazenadas de tempos em tempos quer para gravar quer para ler.

Os arquivos INI são arquivos de inicialização e são uma herança dos velhos tempos dos 16 bits. Existem dois tipos de arquivos INI : os arquivos de sistema ( system INI files ) tal como o WIN.INI e os arquivos privados ( privates INI files) que são usados por outras aplicações além do windows.

O registro do Windows existe desde a versão 3.1, onde era usado para armazenar informação sobre como a aplicação iria abrir e imprimir arquivos. Com a chegada do Windows 95 o registro foi eleito para armazenar informação sobre a configuração do hardware, dos perfis dos usuários e do software.

O conteúdo do registro esta fisicamente armazenado em dois arquivos : System.dat e User.dat. O arquivo System.dat esta presente no diretório de localização do Windows e contém a configuração do hardware e do software presentes no sistema. O arquivo User.dat está também no diretório de localização do Windows e contém informações especificas sobre o usuário e suas preferências . Para cada usuário existe um arquivo User.dat.

Para poder acomodar uma grande variedade de informação a ser armazenada no registro ele suporta varios tipos de formato de dados. Veja na tabela abaixo:

Tipos de dados Descrição
REG_BINARY Binario
REG_DWORD Longo
REG_DWORD_BIGENDIAN Longo
REG_DWORD_LITTLE_ENDIAN Longo
REG_EXPAND_SZ Comprimido
REG_LINK Link Simbolico
REG_MULTI_SZ Lista de strings separados por Null
REG_NONE Tipo de dado Indefinido
REG_RESOURCE_LIST Driver de dispositivo
REG_SC Tipo deString bateterminado por Null

Para acessar a informação do registro você pode usar o aplicativo RegEdit.exe assim:

  1. Clique no botão Iniciar e a seguir na opção Executar
  2. Digite a seguir o nome do aplicativo Regedit e tecle enter e você verá a figura abaixo:

A estrutura do Registro

O Registro está dividido em seções que são referenciadas como Keys (chaves). Cada Key contém valores relacionados de SubKeys (subchaves). A seguir veremos uma descrição resumida de cada seção:

1-) HKEY_LOCAL_MACHINE

Contém todos valores do registro que estão relacionados a configuração do hardware e do software do sistema.

2-) HKEY_USERS

Contém as configurações padrão para todos os novos usuários do sistema atual. Quando um novo usuário é inicialmente criado , as configuracões do registro contidas nesta seção serão usadas a fim de determinar a configuração inicial o Windows.

3-) HKEY_CLASSES_ROOT

Contém uma cópia da informação armazenada na seção Software\Classes da seção HKEY_LOCAL_MACHINE do registro.

4-) HKEY_CURRENT_USER

Contém todas as configurações do windows e dos softwares para o usuário atual do sistema.

5-) HKEY_CURRENT_CONFIG

Contém toda a informação do registro relacionada com a configuração atual do Windows. Esta seção é reconstruida a cada inicialização do Windows.

6-) HKEY_DYN_DATA

Contém informação relacionada aos dispositivos e drivers atualmente em uso pelo sistema. Esta seção é reconstruida a cada inicialização do Windows.

Usando o Visual Basic para acessar o registro do Windows

Podemos acessar o registro do Windows usando o Visual Basic , embora não tenhamos total acesso as informações armazenadas no registro.

As funções usadas no Visual para o acesso ao registro do Windows são:

Functão Descrição
GetSetting Retorna a o valor de uma chave especifica do registro
SaveSetting Salva uma chave e o seu valor no registro.
GetAllSettings Retorna todas as chaves do registro para um aplicação
DeleteSetting Exclui um valor configurado no registro e um chave

O Visual Basic fornece um localização padrão para armazenar informações sobre as aplicações criadas com o Visual Basic,

HKEY_CURRENT_USER\Software\VB and VBA Program Settings\appname\section\key

A função GetSetting

Esta função possui a seguinte sintaxe:

GetSetting appname, section , key , Default

Argumento Descriçao
appname Contém o nome da aplicação ou projeto cuja chave é requisitada
section Contém o nome da secção onde a chave esta localizada.
key Contem o nome da chave.
default Contém o valor de retorno padrão caso nenhum valor for encontrado na chave especificada.

Somente o argumento Default é opcional, os demais são obrigatórios.

Exemplo:

SaveSetting "Teste","Inicio", "Top", 75
SaveSetting "Teste","Inicio", "Left", 50

ConfigGetSetting(appname := "Teste", section := "Inicio",key := "Left", default := "25")

A função GetSetting retornando os valores previamente gravados pela função SaveSetting. O valor retornado pela função é do tipo Variant

A função SaveSetting

Esta função possui a seguinte sintaxe:

SaveSetting appname, section, key, setting

Argumento Descrição
appname Contém o nome do projeto ao qual a configuração desejamos salvar.
section Contém o nome da secção onde a esta a chave na qual desejamos salvar os valores
key Contém o nome da chave onde desejamos salvar as configurações.
setting Contém o valor a ser salvo na chave..

Exemplo:

SaveSetting "Teste","Inicio", "Top", 75
SaveSetting "Teste","Inicio", "Left", 50

A função DeleteSetting

Esta função possui a seguinte sintaxe:

DeleteSetting appname, section,Key
The DeleteSetting function requires the use of the following parameters:
Parâmetro Descrição
appname Informa o nome da aplicação , que esta contido na configuracao da aplicacao , que desejamos excluir.
section Informa o nome da seção do registro que contém a chave que desejamos excluir.
Key Informa o nome da chave que desejamos excluir. Se nao for informado todas as chaves na seção serão excluidas.

Se o nome da seção ou da chave não existir a função DeleteSetting não realiza ação alguma , nem retorna uma mensagem de erro.

Exemplo: Para deletar a opção Teste da aplicação Aplicativo do registro do Windows , usamos:Registry

DeleteSetting "Aplicativo, "Opção","Teste"

A função GetAllSettings

Esta função possui a seguinte sintaxe:

GetAllSettings appname, section
Parametro Descrição
appname Informa o nome da aplicação para qual desejamos capturar os valores da configuração.
section Contém o nome da seção do registro do Windows para o qual desejamos capturar os valores.

A função GetAllSettings retorna um vetor bidimensional de valores do tipo Variant contendo a chave e o os valores da seção.

Exemplo:Para retornar todas os valores da seção Opção para as configurações de Aplicativo, fazemos:

Valor= GetAllSettings("Aplicativo", "Opção")

Aplicando a teoria - Criando um dicionário no registro

Vamos mostrar uma das muitas possibilidades de utilização das funções até aqui explicadas em um projeto simples que usa as funções SaveSetting e GetSetting para gravar e recuperar informações do registro do Windows. Vamos criar um dicionário onde as palavras serão armazenadas no registro do Windows

Crie um novo projeto no Visual Basic com um formulário e os controles como exibidos abaixo:

Nosso formulário possui os controles:

1-TextBox - Palavra - Onde iremos informar a palavara a procurar

2-Label - label1 - Para exibirmos mensagens

3-Botão de comando - Lookup - para acionar a busca pela palavra

4-Text Box - definicao - para exibirmos as definições encontrada.

5-TextBox - AddNome - Recebe a palavra a incluir

6-TextBox - AddDefinicao - para incluir a definicao

7 -Botão de comando - AddWord - Para incluir a palavra e a definição.

O código do projeto é o seguinte:

Private Sub AddWord_Click()
    SaveSetting "Dicionario", "Definicao", AddNome, AddDefinicao 'Salva entrada no registro
    AddNome = ""
    AddDefinicao = ""
    MsgBox ("Palavra incluida com Sucesso no dicionário")
End Sub

Private Sub Form_Activate()
   palavra.SetFocus
End Sub

Private Sub LookUp_Click()
    Label3.Caption = UCase(palavra) & " Significa : "
    definicao = GetSetting("Dicionario", "Definicao", palavra) 'Pega a palavra do registro
    palavra.SetFocus
    If definicao = "" Then
       definicao = "Não encontrei a palavra no dicionario !"
       AddNome.Text = palavra
       AddDefinicao.SetFocus
    End If
End Sub

O que precisamos comentar aqui é a utilização de Savesetting e GetSetting, vejamos:

definicao = GetSetting("Dicionario", "Definicao", palavra)

Recupera a palavra informada no textbox palavra da seção Definicao do aplicativo Dicionario

SaveSetting "Dicionario", "Definicao", AddNome, AddDefinicao

Salva a palavra informada no textbox AddNome e seu significado informado no textbox AddDefinição na seção definição da aplicação Dicionario.

Criamos para aplicação dicionario uma seção chamada definição onde armazenamos a palavra e o seu significado usando SaveSetting e recuperamos os valores com GetSetting.. Se você usar o Regedit para visualiar o registro e procurar pela chave:

HKEY_CURRENT_USER\Software\VB and VBA Program Settings

irá visualizar o seguinte:

Você esta vendo o resultado do processamento do aplicativo , como mostrado abaixo:

Pegue o código clicando aqui : dicio.zip

É obvio que esta não é a melhor forma de utilizar o registro do windows , a usamos apenas para ilustrar a utilização das funções vistas. Uma das utilizações mais frequentes para estas funções é salvar a configuração na saída do aplicativo de forma que a possamos restaurar quando o usuário voltar a executar a sua aplicação .Vejamos um exemplo de como fazer isto:

1-Ao carregar o formulário atribuimos valores as propriedades Height, Width , Top and Left.

2-Voce deve alterar o tamanho do formulário e clicar no botão Sair. Ao fazer isto os novos valores das propriedades são salvas usando SaveSetting. Estes valores serão recuperados usando GetSetting ao carregarmos o aplicativo novamente. O Código abaixo é auto-explicativo.

Formulário do projeto exemplo
 
O código do projeto
Private Sub cmd_Exit_Click()
'(1) salva as configuracoes
'(2) informa o local aonde salvar as configuracoes
'(3) seção onde os valores serão salvos
'(4) sub-seção onde os valores serão salvos
'(5) os valores que desejamos salvar
'     (1)           (2)        (3)        (4)              (5)
    SaveSetting App.EXEName, "Padrao", "MeuHeight", Me.Height
    SaveSetting App.EXEName, "Padrao", "MeuWidth", Me.Width
    SaveSetting App.EXEName, "Padrao", "MeuTop", Me.Top
    SaveSetting App.EXEName, "Padrao", "MeuLeft", Me.Left
End
End Sub

Private Sub Form_Load()
'define as variaveis
Dim Height As Long, Width As Long, Top As Long, Left As Long, Caption As Long
'(1) o nome da variavel
'(2) captura o valor do aplicativo
'(3) nome da seçao onde os valores estao salvos
'(4) nome da sub-seção onde os valores estão salvos
'(5) os valores padrões iniciais para o formulario
'        (1)              (2)                (3)       (4)      (5)
        Height = GetSetting(App.EXEName, "Padrao", "MeuHeight", 3510)
        Width = GetSetting(App.EXEName, "Padrao", "MeuWidth", 5300)
        Top = GetSetting(App.EXEName, "Padrao", "MeuTop", 600)
        Left = GetSetting(App.EXEName, "Padrao", "MeuLeft", 600)
       'atribui os valores das variaveis as propriedades do formulario
        Me.Height = Height
        Me.Width = Width
        Me.Top = Top
        Me.Left = Left
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
   'salva as configuracoes ao sair
    SaveSetting App.EXEName, "Padrao", "MeuHeight", Me.Height
    SaveSetting App.EXEName, "Padrao", "MeuWidth", Me.Width
    SaveSetting App.EXEName, "Padrao", "MeuTop", Me.Top
    SaveSetting App.EXEName, "Padrao", "MeuLeft", Me.Left
End Sub

Private Sub Form_Unload(Cancel As Integer)
    'salva as configuracoes
    SaveSetting App.EXEName, "Padrao", "MeuHeight", Me.Height
    SaveSetting App.EXEName, "Padrao", "MeuWidth", Me.Width
    SaveSetting App.EXEName, "Padrao", "MeuTop", Me.Top
    SaveSetting App.EXEName, "Padrao", "MeuLeft", Me.Left
End Sub									

E vamos ficando por aqui ...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti