win32/registry is registry accessor library for Win32 platform. It uses importer to call Win32 Registry APIs.
example
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
Predefined keys
-
HKEY_CLASSES_ROOT -
HKEY_CURRENT_USER -
HKEY_LOCAL_MACHINE -
HKEY_PERFORMANCE_DATA -
HKEY_CURRENT_CONFIG -
HKEY_DYN_DATAWin32::Registryobject whose key is predefined key.
For detail, see the article.
Value types
-
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
For detail, see the article.
# File tmp/rubies/ruby-4.0.0/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
Create or open the registry key subkey under key. You can use predefined key HKEY_*. desired and opt is access mask and key option.
If subkey is already exists, key is opened and Registry#created? method will return false.
If block is given, the key reg is yielded and closed automatically after the block exists.
# File tmp/rubies/ruby-4.0.0/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
Replace %-enclosed substrings in str into the environment value of what is contained between the %s. This method is used for REG_EXPAND_SZ.
For detail, see ExpandEnvironmentStrings Win32 API.
# File tmp/rubies/ruby-4.0.0/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
Open the registry key subkey under key. key is Win32::Registry object of parent key. You can use predefined key HKEY_*. desired and opt is access mask and key option.
For detail, see the MSDN.
If block is given, the key reg is yielded and closed automatically after the block exists.
# File tmp/rubies/ruby-4.0.0/ext/win32/lib/win32/registry.rb, line 415
def self.time2wtime(time)
time.to_i * 10000000 + 116444736000000000
end
# File tmp/rubies/ruby-4.0.0/ext/win32/lib/win32/registry.rb, line 401
def self.type2name(type)
@@type2name[type] || type.to_s
end
Convert registry type value type to readable string.
# File tmp/rubies/ruby-4.0.0/ext/win32/lib/win32/registry.rb, line 408
def self.wtime2time(wtime)
Time.at((wtime - 116444736000000000) / 10000000)
end
Convert 64-bit FILETIME integer wtime into Time object.