Manipulando o registro do Windows com Ruby
Postador por Tiago Damasceno
Um dia desses precisei escrever um script para manipular o registro do Windows para que eu pudesse altenar entre diferentes configurações do Rational ClearCase para acessar diferentes repositórios de diferentes servidores, e para agilizar meu trabalho utilizei a linguagem 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.
RUBY:
- 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étodocreate, passando variável chave, o que significa que será criada a chaveHKEY_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
RUBY:
- #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
RUBY:
- #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
RUBY:
- #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
RUBY:
- #true define exclusão recursiva
- Win32::Registry::HKEY_CURRENT_USER.delete_key(chave, true)
2ª forma
RUBY:
- #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
0 comentários:
Postar um comentário