Reputation: 323
I need to add a new dword (32-bit) value '1001' in the following registry path:
path = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3\\"
After adding, the registry structure should look like this:
How can achieve the same using ruby?
Upvotes: 1
Views: 5225
Reputation: 323
Following lines solved the problem for me.
Win32::Registry::HKEY_CURRENT_USER.create(path) do |reg|
reg.write('1001', Win32::Registry::REG_DWORD, 0)
end
Here I'm setting the value 0 for newly created dword (32-bit) value '1001' in registry.
Upvotes: 1
Reputation: 3272
This is a way to modify user environment variables, have you tried this ?
require 'win32/registry.rb'
path = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3\\"
Win32::Registry::HKEY_CURRENT_USER.open('Environment', Win32::Registry::KEY_WRITE) do |reg|
reg[path] = '1001'
end
The documentation also says you should log off and log back on or broadcast a WM_SETTINGCHANGE message to make changes seen to applications. This is how broadcasting can be done in Ruby:
require 'Win32API'
SendMessageTimeout = Win32API.new('user32', 'SendMessageTimeout', 'LLLPLLP', 'L')
HWND_BROADCAST = 0xffff
WM_SETTINGCHANGE = 0x001A
SMTO_ABORTIFHUNG = 2
result = 0
SendMessageTimeout.call(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 'Environment', SMTO_ABORTIFHUNG, 5000, result)
You may take a look at this original answer and this usefull article.
Upvotes: 1