Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 4092

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 4099

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 4108

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 4117

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 4122

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 4127

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 4136

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 4141

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 4147

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 4152

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 1827

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 1827

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 2180

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3025

Warning: implode() [function.implode]: Argument must be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3077

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 2180

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3025

Warning: implode() [function.implode]: Argument must be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3077

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 2180

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3025

Warning: implode() [function.implode]: Argument must be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3077

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 2180

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3025

Warning: implode() [function.implode]: Argument must be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3077

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 2180

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3025

Warning: implode() [function.implode]: Argument must be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3077

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 2180

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3025

Warning: implode() [function.implode]: Argument must be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3077

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3108

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3151

Warning: array_keys() [function.array-keys]: The first argument should be an array in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292

Warning: Invalid argument supplied for foreach() in /hd/codigofonte/www/_resources/classes/geshi.php on line 3292
CódigoFonte.net > Dicas de > Acessando/Manipulando o Registro do Windows
Olá! Quinta Feira, 28 de Agosto de 2008.



Dicas CódigoFonte.net
Quarta Feira, 30 de Maio de 2007

Acessando/Manipulando o Registro do Windows

Os sistemas desenvolvidos cada vez mais precisam de informações de configuração e opções (como senhas, posições de impressão e coisas do tipo) e você precisa gravar estas informações em algum lugar.

O Delphi possibilita armazenar estas informações em Arquivos .INI (lembra deles...do Windows 3.x) através do Objeto TInifile, mas a não ser q você esteja utilizando esta versão do Windows (coisa q eu acho difícil..rsrsrs), a melhor alternativa é utilizar o registro do Sistema, que já está disponível a partir da versão Windows 95.

Se você não sabe do que eu estou falando, não se desespere. Antes de começar a utilizar estas informações vá até Iniciar-Executar e digite Regedit. O editor do registro do sistema será exibido e você poderá ter uma idéia de como ele funciona. O programa separa as opções de registro em "pastas", conhecidas aqui como "chaves". Essas chaves contém dados, chamados de "valores". Esses valores possuem um nome, um tipo e um valor específico.

O Delphi encapsula o registro através do objeto TRegistry. É através dele que você irá acessar os dados do Registro. Para você entender melhor como funciona o objeto, vamos explicar primeiro como funciona o Registro do Windows:

As principais chaves "raízes" são: HKEY_LOCAL_MACHINE e HKEY_CURRENT_USER. Todas as informações sobre os programas ficam nessas chaves (as outras normalmente possuem informações sobre o Windows).

O InstallShield (programa para geração de instaladores), por exemplo, instala as informações sobre o nome de usuário e empresa do seu programa em HKEY_LOCAL_MACHINESOFTWARENome da Sua EmpresaNome Do ProgramaVersão, com os valores Company e Name (Empresa e Nome do Usuário).

Os programas, por sua vez, usam a chave HKEY_CURRENT_USERSoftware para armazenar informações de seus programas. E é nessa chave que você deve inserir sua sub-chave e colocar lá as informações necessárias.

Um pequeno exemplo de como utilizar o registro do Windows. Suponhamos que o programa necessite gravar a posição da janela, o seu tamanho e o diretório inicial dos diálogos Abrir e Salvar.

Após a criação do objeto, devemos informar qual chave devemos utilizar, utilizando o método
  1. OpenKey (Chave, PodeCriar);
onde Chave é o nome da sub-chave e PodeCriar é um valor booleano que permite (ou não) criar a chave caso a mesma não exista.

Bom, agora vamos logo ao que interessa. A gravação/Leitura no Registro.
Este exemplo ilustra como gravar dados no Registro.

Primeiramente devemos declarar a Unit Registry na clausula Uses de sua aplicação.

  1. procedure frmMain.GravarRegistro;
  2. const
  3.  Raiz : String = 'SoftwarePrograma';
  4. var
  5.  Registro : TRegistry;
  6. begin
  7.  // Chama o construtor do objeto
  8.  Registro := TRegistry.Create;
  9.  { Abre a chave (se o 2°. Parâmetro for True, ele cria a chave caso ela ainda não exista. }
  10.  Registro.OpenKey (Raiz, True);
  11.  // Grava as informações do form
  12.  Registro.WriteInteger ('Largura', Width);
  13.  Registro.WriteInteger ('Altura', Height);
  14.  Registro.WriteInteger ('Esquerda', Left);
  15.  Registro.WriteInteger ('Topo', Top);
  16.  // Grava as informações das caixas Abrir e Salvar.
  17.  Registro.WriteString ('Abrir Inicial', OpenDialog1.InitialDir);
  18.  Registro.WriteString('Salvar Inicial', SaveDialog1.InitialDir);
  19.  // Fecha a chave e o objeto
  20.  Registro.CloseKey;
  21.  Registro.Free;
  22. end;


Após a criação do objeto, deve-se escolher uma chave para armazenas os valores. No caso, "SoftwarePrograma", cuja chave raiz é HKEY_CURRENT_USER. Note que é para se separar as chaves das sub-chaves utiliza-se o caracter "", tal como nos diretórios do DOS.

Os métodos WriteInteger e WriteString são utilizados para gravar valores inteiros e caracteres, respectivamente. A sintaxe básica é:

  1. Registro.WriteString (NomeDoValor, Conteúdo);


onde NomeDoValor é o nome que você vai dar ao valor dentro da chave, e Conteúdo é o conteúdo desse valor.

Para escrever dados de outros tipos, utilize as funções:

  1. WriteBool (NomeDoValor, Conteúdo); // Dados tipo Boolean
  2. WriteBinaryData (NomeDoValor, Conteúdo); // Valor Binário
  3. WriteCurrency (NomeDoValor, Conteúdo); // Dados tipo Currency
  4. WriteDate (NomeDoValor, Conteúdo); // Dados tipo TDate
  5. WriteDateTime (NomeDoValor, Conteúdo); // Dados tipo TDateTime
  6. WriteFloat (NomeDoValor, Conteúdo); // Dados tipo Float (Real)
  7. WriteInteger (NomeDoValor, Conteúdo); // Dados tipo Integer
  8. WriteString (NomeDoValor, Conteúdo); // Dados tipo String
  9. WriteTime (NomeDoValor, Conteúdo); // Dados tipo TTime


Este exemplo mostra como podemos ler dados do registro do Windows utilizando o Delphi.

  1. procedure frmMain.LerRegistro;
  2. const
  3.  Raiz : String = ‘SoftwarePrograma';
  4. var
  5.  Registro : TRegistry;
  6. begin
  7.  // Chama o construtor do objeto
  8.  Registro := TRegistry.Create;
  9.  with Registro do
  10.  begin
  11.   // Somente abre se a chave existir
  12.   if OpenKey (Raiz, False) then
  13.     // Envia as informações ao form, vendo se os valores existem, primeiramente...
  14.     if ValueExists ('Largura') then
  15.       Width := ReadInteger ('Largura');
  16.     if ValueExists ('Altura') then
  17.       Height := ReadInteger ('Altura');
  18.     if ValueExists ('Esquerda') then
  19.       Left := ReadInteger ('Esquerda');
  20.     if ValueExists ('Topo') then
  21.       Top := ReadInteger ('Topo');
  22.     // Envia as informações para as caixas Abrir e Salvar.
  23.     OpenDialog1.InitialDir := ReadString ('Abrir Inicial');
  24.     SaveDialog1.InitialDir := ReadString ('Salvar Inicial');
  25.     // Fecha a chave e o objeto
  26.     Registro.CloseKey;
  27.     Registro.Free;
  28.  end;
  29. End;


Sempre use CloseKey quando não for precisar do Registro. Isso permite que as opções sejam gravadas permanentemente, evitando que qualquer problema que o computador tenha afete seu programa.

Os métodos ReadInteger e ReadString funcionam praticamente da mesma maneira que seus correspondentes de escrita. A diferença é que ao invés de passar o valor Conteúdo, eles retornam o valor armazenado. Os correspondentes dos outros tipos são:

  1. ReadBool (NomeDoValor)   // Valor booleano
  2. ReadBinaryData ( NomeDoValor ; var Buffer ; TamBuffer : Integer) // Valor Inteiro
  3. ReadCurrency (NomeDoValor) // Valor Currency
  4. ReadDate (NomeDoValor)   // Valor Date
  5. ReadDateTime (NomeDoValor) // Valor DateTime;
  6. ReadFloat (NomeDoValor)  // Valor Float(Real)
  7. ReadInteger (NomeDoValor) // Valor Inteiro
  8. ReadString (NomeDoValor)  // Valor String;
  9. ReadTime (NomeDoValor)   // Valor DateTime


É isso aí pessoal....
Qualquer dúvida, entrem em contato.
e-mail: markuvinicius@uol.com.br
msn : pontoclick@hotmail.com

Até a próxima.
Marku Vinícius

Conheça nosso parceiro:


Comentários do artigo [Novo comentário]

Nenhum comentário, seja o primeiro a comentar.
Para adicionar um comentário você deve efetuar o login

Gostou do CódigoFonte.net? Quer indicar a um amigo?
Preencha os campos a seguir.
Seu Nome:
Seu E-mail:
E-mail de seu Amigo:



Melhor Visualizado com
800x600 de Resolução

CodigoFonte.net » CodigoFonte.eti.br » CompreDeTudo.com » MeuMural.com.br » Todos os Direitos Reservados © 2002/2008