Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Ruby Programming/Standard Library/Win32::Registry

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

The source code itself is also pretty usefulhttps://github.com/jruby/jruby/blob/ec40f3789385a64b0286f2771b00c1b4217d409d/lib/ruby/stdlib/win32/registry.rb. 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} endwhich 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