如何使用ruby在注册表中添加新的dword(32位)值?

时间:2015-05-07 07:32:11

标签: ruby windows registry

我需要添加一个新的双字(32位)值' 1001'在以下注册表路径中:

path = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3\\" 

添加后,注册表结构应如下所示: enter image description here

如何使用ruby实现相同的目标?

2 个答案:

答案 0 :(得分:1)

这是一种修改用户环境变量的方法,你试过这个吗?

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

该文档还说明您应该注销并重新登录或广播WM_SETTINGCHANGE消息,以便对应用程序进行更改。这就是如何在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)

您可以查看此original answer和此usefull article

答案 1 :(得分:1)

以下几行解决了我的问题。

    Win32::Registry::HKEY_CURRENT_USER.create(path) do |reg|
       reg.write('1001', Win32::Registry::REG_DWORD, 0)
    end

这里我在注册表中为新创建的dword(32位)值'1001'设置值0.