class Win32::Registry
win32/registry 是 Win32 平台下的注册表访问库。它使用 importer 调用 Win32 Registry API。
示例
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
预定义键
-
HKEY_CLASSES_ROOT -
HKEY_CURRENT_USER -
HKEY_LOCAL_MACHINE -
HKEY_PERFORMANCE_DATA -
HKEY_CURRENT_CONFIG -
HKEY_DYN_DATAWin32::Registry对象,其键为预定义键。
有关详细信息,请参阅 文章。
值类型
-
REG_NONE -
REG_SZ -
REG_EXPAND_SZ -
REG_BINARY -
REG_DWORD -
REG_DWORD_BIG_ENDIAN -
REG_LINK -
REG_MULTI_SZ -
REG_RESOURCE_LIST -
REG_FULL_RESOURCE_DESCRIPTOR -
REG_RESOURCE_REQUIREMENTS_LIST -
REG_QWORD
有关详细信息,请参阅 文章。
Public Class Methods
Source
# File ext/win32/lib/win32/registry.rb, line 468 def self.create(hkey, subkey, desired = KEY_ALL_ACCESS, opt = REG_OPTION_RESERVED) newkey, disp = API.CreateKey(hkey.instance_variable_get(:@hkey), subkey, opt, desired) obj = new(newkey, hkey, subkey, disp) if block_given? begin yield obj ensure obj.close end else obj end end
创建或打开 key 下的注册表键 subkey。您可以使用 预定义键 HKEY_*。desired 和 opt 分别是访问掩码和键选项。
如果 subkey 已存在,则该键将被打开,并且 Registry#created? 方法将返回 false。
如果提供了块,则将 reg 键传递给块,并在块退出后自动关闭。
Source
# File ext/win32/lib/win32/registry.rb, line 381 def self.expand_environ(str) str.gsub(Regexp.compile("%([^%]+)%".encode(str.encoding))) { v = $1.encode(LOCALE) (ENV[v] || ENV[v.upcase])&.encode(str.encoding) || $& } end
将 str 中由 % 包围的子字符串替换为包含在 % 之间的环境变量值。此方法用于 REG_EXPAND_SZ。
有关详细信息,请参阅 ExpandEnvironmentStrings Win32 API。
Source
# File ext/win32/lib/win32/registry.rb, line 438 def self.open(hkey, subkey, desired = KEY_READ, opt = REG_OPTION_RESERVED) subkey = subkey.chomp('\\') newkey = API.OpenKey(hkey.instance_variable_get(:@hkey), subkey, opt, desired) obj = new(newkey, hkey, subkey, REG_OPENED_EXISTING_KEY) if block_given? begin yield obj ensure obj.close end else obj end end
打开 key 下的注册表键 subkey。key 是父键的 Win32::Registry 对象。您可以使用 预定义键 HKEY_*。desired 和 opt 分别是访问掩码和键选项。
有关详细信息,请参阅 MSDN。
如果提供了块,则将 reg 键传递给块,并在块退出后自动关闭。
Source
# File ext/win32/lib/win32/registry.rb, line 415 def self.time2wtime(time) time.to_i * 10000000 + 116444736000000000 end
Source
# File ext/win32/lib/win32/registry.rb, line 401 def self.type2name(type) @@type2name[type] || type.to_s end
将注册表类型值 type 转换为可读字符串。
Source
# File ext/win32/lib/win32/registry.rb, line 408 def self.wtime2time(wtime) Time.at((wtime - 116444736000000000) / 10000000) end
将 64 位 FILETIME 整数 wtime 转换为 Time 对象。