为什么注册表值在 Python 3 on Windows 中的 winreg 中不匹配?
Why registry value doesn't match in winreg in Python 3 on Windows?
大家好!
我正在编写小型 python3 项目。在我的代码中,有一个函数可以检查用户是否安装了特定的 DirectX 版本。
该函数如下。
def check_directx():
try:
reg_obj = OpenKey(HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\DirectX')
except FileNotFoundError:
return False
dx_value_str = EnumValue(reg_obj, 1)[1][0:4]
CloseKey(reg_obj)
if dx_value_str != "4.09":
return False
return True
我想测试这个功能所以我在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectX中将原来的版本值(4.09.00.0904)改成了4.07.00.0904。但它没有用。变量 dx_value_str 的值仍然是 4.09.00.0904.
我搜索了注册表,发现 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectX 中有相同的键值。我改了这里的版本值,变量dx_value_str的值终于改了。
如你所见,我在'SOFTWARE\Microsoft\DirectX'中打开了密钥,但它带来了'SOFTWARE\Wow6432Node\Microsoft\DirectX'中的值。
这样的情况可以吗?还是我的代码有问题?
请帮帮我!
这个问题是因为您可能使用的是 32 位 python,试试这个:
import winreg
reg_obj = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\DirectX',0, (winreg.KEY_WOW64_64KEY+ winreg.KEY_READ))
dx_value_str = winreg.EnumValue(reg_obj, 1)[1][0:4]
print(dx_value_str)
winreg.CloseKey(reg_obj)
大家好!
我正在编写小型 python3 项目。在我的代码中,有一个函数可以检查用户是否安装了特定的 DirectX 版本。
该函数如下。
def check_directx():
try:
reg_obj = OpenKey(HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\DirectX')
except FileNotFoundError:
return False
dx_value_str = EnumValue(reg_obj, 1)[1][0:4]
CloseKey(reg_obj)
if dx_value_str != "4.09":
return False
return True
我想测试这个功能所以我在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectX中将原来的版本值(4.09.00.0904)改成了4.07.00.0904。但它没有用。变量 dx_value_str 的值仍然是 4.09.00.0904.
我搜索了注册表,发现 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectX 中有相同的键值。我改了这里的版本值,变量dx_value_str的值终于改了。
如你所见,我在'SOFTWARE\Microsoft\DirectX'中打开了密钥,但它带来了'SOFTWARE\Wow6432Node\Microsoft\DirectX'中的值。
这样的情况可以吗?还是我的代码有问题?
请帮帮我!
这个问题是因为您可能使用的是 32 位 python,试试这个:
import winreg
reg_obj = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\DirectX',0, (winreg.KEY_WOW64_64KEY+ winreg.KEY_READ))
dx_value_str = winreg.EnumValue(reg_obj, 1)[1][0:4]
print(dx_value_str)
winreg.CloseKey(reg_obj)