Ruby Programming/Standard Library/Win32::Registry
The source code itself is also pretty useful.
how to do a simple query (values)
With the win32 registry, keys mean “subkey” (like a folder), and values mean “subentry” (like file). This example shows how to look at values:
require 'win32/registry' keyname= 'SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment' # KEY_ALL_ACCESS enables you to write and deleted. # the default access is KEY_READ if you specify nothing access = Win32::Registry::KEY_ALL_ACCESS Win32::Registry::HKEY_LOCAL_MACHINE.open(keyname, access) do |reg| # each is the same as each_value, because #each_key actually means # "each child folder" so #each doesn't list any child folders... # use #keys for that... reg.each{|name, value| puts name, value} end
or
a = Win32::Registry::HKEY_LOCAL_MACHINE.open \ "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", Win32::Registry::KEY_READ a.each{|n, v| p n, v} a.close
which results in
CLASSPATH 1 ComSpec 2 FP_NO_HOST_CHECK 1 HOME ... and this example shows you how to look at keys:
require 'win32/registry' keyname= "SOFTWARE" # this isn't actually case sensitive, but hey access = Win32::Registry::KEY_ALL_ACCESS Win32::Registry::HKEY_LOCAL_MACHINE.open(keyname, access) do |reg|; reg.each_key{|k, v| puts k, v} end
which results in ... Windows 128883664814843750 Windows 3.1 Migration Status 128783367437500000 WinPcap
Default tutorial
This code is given in the registry.rb file (doesn’t show up in the normal rdocs for some reason)
<code> Win32::Registry::HKEY_CURRENT_USER.open('SOFTWARE\foo') do |reg| value = reg['foo'] # read a value value = reg['foo', Win32::Registry::REG_SZ] # read a value with type type, value = reg.read('foo') # read a value reg['foo'] = 'bar' # write a value reg['foo', Win32::Registry::REG_SZ] = 'bar' # write a value with type reg.write('foo', Win32::Registry::REG_SZ, 'bar') # write a value reg.each_value { |name, type, data| ... } # Enumerate values reg.each_key { |key, wtime| ... } # Enumerate subkeys reg.delete_value(name) # Delete a value reg.delete_key(name) # Delete a subkey reg.delete_key(name, true) # Delete a subkey recursively end </code>
Win32::Registry.create
<code> Win32::Registry::HKEY_LOCAL_MACHINE.create "software\\abc" </code>
Note also that you can do nested creates in a single call, like “software\\classes\\*\\shell\\abc\\subdir\\subdir”
how to write default values:
write default values ("Default" in regedit) by passing nil as the name, ex:
a.write_s nil, "a default string" # and read it back a.read_s nil
More complex example
This code adds an option to the context menu with you right click on any file.
name = Win32::Registry::HKEY_LOCAL_MACHINE.create "Software\\classes\\*\\shell\\open_with_arcadia" name.write_s nil, "play with arcadia" dir = Win32::Registry::HKEY_LOCAL_MACHINE.create "Software\\classes\\*\\shell\\open_with_arcadia\\command" dir.write_s nil, %!"#{ruby}" "#{arcadia}" "%1"!
Related links
http://rubyforge.org/snippet/detail.php?type=snippet&id=13
This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.