Изменение реестра через python работает некорректно
import _winreg as registry
key=registry.OpenKey(registry.HKEY_CURRENT_USER,"Software\Microsoft\Windows\CurrentVersion\Internet Settings",0,registry.KEY_ALL_ACCESS)
proxy=proxy_server+":"+proxy_port
registry.SetValue(key, 'ProxyEnable', registry.REG_SZ, 'dword:00000001')
registry.SetValue(key, 'ProxyServer', registry.REG_SZ, proxy)
Я использую приведенный выше код для установки прокси. Но он не добавляет новый ключ в настройках Интернета. Вместо этого создается новая папка и вставляется ключ с именем default с указанными значениями.
Кто-нибудь может мне помочь в этом. Действительно застрял
1 ответ
Хотя я не понимаю, почему ваш код не работает, я смог воспроизвести проблему, а также найти обходной путь, который заключается в том, чтобы просто сделать эквивалентную вещь через _winreg.SetValueEx()
функция.
Код с этим тривиальным изменением показан ниже. Я также добавил r
префикс к key
строковая константа, поскольку она содержит буквенные символы обратной косой черты (но это не вызывало проблему). (Обратите внимание, что я также изменил имена и значения нескольких литералов, чтобы не конфликтовать с чем-либо, что может быть в реестре моей собственной системы.)
import _winreg as registry
proxy_server = 'some_proxy_server' # dummy value
proxy_port = 'some_proxy_port' # dummy value
key = registry.OpenKey(registry.HKEY_CURRENT_USER,
r"Software\Microsoft\Windows\CurrentVersion\Internet Settings",
0, registry.KEY_ALL_ACCESS)
proxy = proxy_server + ":" + proxy_port
# SetValue doesn't work for some reason...
#registry.SetValue(key, '_ProxyEnable', registry.REG_SZ, 'dword:00000001')
#registry.SetValue(key, '_ProxyServer', registry.REG_SZ, proxy)
# but SetValueEx does work
registry.SetValueEx(key, "_ProxyEnable", 0, registry.REG_SZ, "dword:00000001")
registry.SetValueEx(key, "_ProxyServer", 0, registry.REG_SZ, proxy)
Я также должен прокомментировать эту настройку ProxyEnable
в строковое значение "dword:00000001"
вместо REG_DWORD
ценность 1
кажется немного странным... но это то, что ваш код пытался сделать.