Изменение реестра через 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 кажется немного странным... но это то, что ваш код пытался сделать.

снимок экрана, показывающий правильно измененное значение в редакторе сайта

Другие вопросы по тегам