跳转至内容

Ruby 编程/标准库/Win32::Registry

来自维基教科书,开放的书籍,为开放的世界

源代码本身也非常有用[1]

如何执行简单的查询(值)

[编辑 | 编辑源代码]

在 win32 注册表中,键意味着“子键”(像文件夹),而值意味着“子项”(像文件)。

这个示例展示了如何查看值

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

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

这将导致

CLASSPATH
1
ComSpec
2
FP_NO_HOST_CHECK
1
HOME
...

这个示例展示了如何查看键

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

这将导致

... Windows 128883664814843750 Windows 3.1 Migration Status 128783367437500000 WinPcap

默认教程

[编辑 | 编辑源代码]

这段代码在 registry.rb 文件中给出(由于某种原因,它没有出现在正常的 rdocs 中)。

<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>

还要注意,您可以在单个调用中进行嵌套创建,例如“software\\classes\\*\\shell\\abc\\subdir\\subdir”。

如何写入默认值

[编辑 | 编辑源代码]

通过将 nil 作为名称传递来写入默认值(在注册表编辑器中为“默认”),例如

  a.write_s nil, "a default string"
  # and read it back
  a.read_s nil

更复杂的示例

[编辑 | 编辑源代码]

这段代码在您右键单击任何文件时向上下文菜单添加一个选项。

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"!
[编辑 | 编辑源代码]
  1. https://github.com/jruby/jruby/blob/ec40f3789385a64b0286f2771b00c1b4217d409d/lib/ruby/stdlib/win32/registry.rb
华夏公益教科书