Manipulando o registro do Windows com Ruby
Para aqueles que gostaram da alternativa, veja abaixo como é simples essa manipulação, mostrarei as operações básica que também são as mais utilizadas. Para ficar mais didático, explicarei em parte e com pequenos exemplos.
A versão do Ruby para Windows possui a classe Win32::Registry, que permite justamente a manipulação do registro do Windows, e para utilizá-lo basta apenas escrever require ‘win32/registry’. Para enteder melhor os exemplos abaixo, vamos ver alguns conceitos importantes:
- Registro: é uma espécie de banco de dados, onde são armazenadas as informações sobre todos os programas instalados, estrutura de diretórios, informações do usuário, de drivers, etc
- Chave: é a estrutura básica do registro do Windows, são como pastas utilizada para a organização e armazenamento de valores. O Windows possui basicamente 5 chaves:
- HKEY_CLASSES_ROOT – sua finalidade é manter compatibilidade com programas antigos, que rodam a 16 bits;
- HKEY_CURRENT_USER – ela mostra somente informações do usuário atual do sistema, como configurações personalizadas, etc;
- HKEY_LOCAL_MACHINE – esta é a chave mais importante do Registro, pois nela é que estão as informações sobre programas e hardware. Para se ter noção da importante desta chave, seus dados são guardados num arquivo chamado system.dat.
- HKEY_USERS – no Windows é possível ter vários usuários num único computador e a função desta chave é guardar informações de cada um deles.
- HKEY_CURRENT_CONFIG – contém configurações do usuário atual do computador relativas ao hardware.
- Valor: são como variáveis, que recebe um nome e armazenam valores que podem ser do tipo:
- REG_SZ – Valor da seqüência
- REG_BINARY – Valor binário
- REG_DWORD – Valor Double Word
- REG_MULTI_SZ – Valor de seqüência múltipla
- REG_EXPAND_SZ – Valor de seqüência expansível
Com os conceitos básicos em mente, vamos aos exemplos:
Exemplo 1: Criando um chave e adicionando um valor
As variáveis chave, nome_valor e valor serão utilizadas em todos nossos exemplos.
require 'win32/registry' chave = 'Software\TesteRubyRegistry' nome_valor = 'VersaoRuby' valor = '1.8.6' #cria um nova chave Win32::Registry::HKEY_CURRENT_USER.create(chave) do |regkey| #escreve o valor regkey.write(nome_valor, Win32::Registry::REG_SZ, valor) #para escrever o valor poderia também ser utilizado: #regkey[nome_valor, Win32::Registry::REG_SZ] = valor end |
No exemplo 1 chamamos a constante Win32::Registry::HKEY_CURRENT_USER com o método create, passando variável chave, o que significa que será criada a chave HKEY_CURRENT_USER\Software\TesteRubyRegistry.
A chave criada foi instaciada dentro de regkey, o qual chamamos o método write, passando o nome do valor (nome_valor), o tipo do valor (Win32::Registry::REG_SZ) e o seu contéudo (valor), para que seja escrito o valor VersaoRuby com o conteúdo 1.8.6.
Os demais exemplos seguem a mesma lógica e os detalhes estão comentados no próprio código.
Exemplo 2: Lendo um valor
#define o nivel de acesso da chave, apenas para leitura nivel_acesso = Win32::Registry::KEY_READ #abre um chave Win32::Registry::HKEY_CURRENT_USER.open(chave, nivel_acesso) do |regkey| # o método Win32::Registry.read retorna um array, # contendo o tipo do valor e o valor atual tipo, valor_atual = regkey.read(nome_valor) #para retornar o valor atual poderia também ser utilizado: #valor_atual = regkey[nome_valor] #exibe o valor lido puts "Versao do Ruby: #{valor_atual}" end |
Exemplo 3: Modificando um valor
#definindo um novo valor a variável valor = '1.8.5' #define o nivel de acesso da chave para escrita nivel_acesso = Win32::Registry::KEY_WRITE #abre um chave Win32::Registry::HKEY_CURRENT_USER.open(chave, nivel_acesso) do |regkey| #modifica o valor regkey.write(nome_valor, Win32::Registry::REG_SZ, valor) #para alterar o valor poderia também ser utilizado: #regkey[nome_valor, Win32::Registry::REG_SZ] = valor end |
Exemplo 4: Excluindo um valor
#define o nivel de acesso da chave para escrita nivel_acesso = Win32::Registry::KEY_WRITE #abre um chave Win32::Registry::HKEY_CURRENT_USER.open(chave, nivel_acesso) do |regkey| #exclui o valor regkey.delete_value(nome_valor) end |
Exemplo 5: Excluindo uma chave
1ª forma
#true define exclusão recursiva Win32::Registry::HKEY_CURRENT_USER.delete_key(chave, true) |
2ª forma
#define o nivel de acesso da chave para escrita nivel_acesso = Win32::Registry::KEY_WRITE #abre a chave Software Win32::Registry::HKEY_CURRENT_USER.open('Software', nivel_acesso) do |regkey| #exclui a chave TesteRubyRegistry regkey.delete_key('TesteRubyRegistry') end |
- maio 22, 2007
- por Anderson
- 4 comentários
4 Comentários para “Manipulando o registro do Windows com Ruby”
4 de agosto de 2010 às 17:37
Tava precisando também!
=]
Deixe uma resposta