owgitt
owgitt

Reputation: 323

How to add a new dword (32-bit) value in registry using ruby?

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: enter image description here

How can achieve the same using ruby?

Upvotes: 1

Views: 5225

Answers (2)

owgitt
owgitt

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

SJU
SJU

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

Related Questions