使用 winreg 创建带有 python 的“@”条目
creating a "@" entry with python using winreg
我正在尝试使用 winreg 将以下注册表调整转换为 python:
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf]
@="@SYS:Does_Not_Exist"
痛苦在于我似乎无法复制的“@”。查看 C# 中的示例,他们使用例如空字符串 '' 以输入 @。如果我手动导入上面的内容并使用 winreg 的 EnumValue(),这个条目也会显示为“”。但我似乎无法在 python winreg 中做类似的事情,到目前为止我没有找到解决方法。
显示问题的代码:
from winreg import *
import os
import platform
import sys, time
import win32api as wa, win32con as wc, win32service as ws
def registrySetKey(hive, regpath, key, type, value):
try:
reg = OpenKey(hive, regpath, 0, KEY_ALL_ACCESS)
except EnvironmentError:
try:
reg = CreateKey(hive, regpath, 0, KEY_ALL_ACCESS)
SetValueEx(reg, key, None, type, value)
CloseKey(reg)
except:
print("*** Unable to register path %s, key %s!" % (regpath, key))
return
print("--- Python", version, "is now registered!")
return
try:
if (QueryValue(reg, key) == value):
return
except:
SetValueEx(reg, key, None, type, value)
CloseKey(reg)
reg = CreateKey(HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf')
# This does not work
registrySetKey(HKEY_LOCAL_MACHINE,
r'Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf',
'', REG_SZ, '@SYS:Does_Not_Exist')
手动导入后条目的名称是(默认),使用它也不起作用。
此致,
斯文
您正在使用的函数适用于您的调用,但您需要在值当前不匹配时添加以下内容,即当前未实际设置任何内容:
else:
SetValueEx(reg, key, None, type, value)
所以完整的函数如下:
from winreg import *
import os
import platform
import sys, time
import win32api as wa, win32con as wc, win32service as ws
def registrySetKey(hive, regpath, key, type, value):
try:
reg = OpenKey(hive, regpath, 0, KEY_ALL_ACCESS)
except EnvironmentError:
try:
reg = CreateKey(hive, regpath, 0, KEY_ALL_ACCESS)
SetValueEx(reg, key, None, type, value)
CloseKey(reg)
except:
print("*** Unable to register path %s, key %s!" % (regpath, key))
return
print("--- Python", version, "is now registered!")
return
try:
if (QueryValue(reg, key) == value):
return
else:
SetValueEx(reg, key, None, type, value) # added
except:
SetValueEx(reg, key, None, type, value)
CloseKey(reg)
reg = CreateKey(HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf')
registrySetKey(HKEY_LOCAL_MACHINE,
r'Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf',
'', REG_SZ, '@SYS:Does_Not_Exist')
根据您的 Windows 版本,这样做可能会修改以下键:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf
我正在尝试使用 winreg 将以下注册表调整转换为 python:
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf]
@="@SYS:Does_Not_Exist"
痛苦在于我似乎无法复制的“@”。查看 C# 中的示例,他们使用例如空字符串 '' 以输入 @。如果我手动导入上面的内容并使用 winreg 的 EnumValue(),这个条目也会显示为“”。但我似乎无法在 python winreg 中做类似的事情,到目前为止我没有找到解决方法。
显示问题的代码:
from winreg import *
import os
import platform
import sys, time
import win32api as wa, win32con as wc, win32service as ws
def registrySetKey(hive, regpath, key, type, value):
try:
reg = OpenKey(hive, regpath, 0, KEY_ALL_ACCESS)
except EnvironmentError:
try:
reg = CreateKey(hive, regpath, 0, KEY_ALL_ACCESS)
SetValueEx(reg, key, None, type, value)
CloseKey(reg)
except:
print("*** Unable to register path %s, key %s!" % (regpath, key))
return
print("--- Python", version, "is now registered!")
return
try:
if (QueryValue(reg, key) == value):
return
except:
SetValueEx(reg, key, None, type, value)
CloseKey(reg)
reg = CreateKey(HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf')
# This does not work
registrySetKey(HKEY_LOCAL_MACHINE,
r'Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf',
'', REG_SZ, '@SYS:Does_Not_Exist')
手动导入后条目的名称是(默认),使用它也不起作用。
此致, 斯文
您正在使用的函数适用于您的调用,但您需要在值当前不匹配时添加以下内容,即当前未实际设置任何内容:
else:
SetValueEx(reg, key, None, type, value)
所以完整的函数如下:
from winreg import *
import os
import platform
import sys, time
import win32api as wa, win32con as wc, win32service as ws
def registrySetKey(hive, regpath, key, type, value):
try:
reg = OpenKey(hive, regpath, 0, KEY_ALL_ACCESS)
except EnvironmentError:
try:
reg = CreateKey(hive, regpath, 0, KEY_ALL_ACCESS)
SetValueEx(reg, key, None, type, value)
CloseKey(reg)
except:
print("*** Unable to register path %s, key %s!" % (regpath, key))
return
print("--- Python", version, "is now registered!")
return
try:
if (QueryValue(reg, key) == value):
return
else:
SetValueEx(reg, key, None, type, value) # added
except:
SetValueEx(reg, key, None, type, value)
CloseKey(reg)
reg = CreateKey(HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf')
registrySetKey(HKEY_LOCAL_MACHINE,
r'Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf',
'', REG_SZ, '@SYS:Does_Not_Exist')
根据您的 Windows 版本,这样做可能会修改以下键:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf