使用下面的代码,我可以成功地从我的Windows7机器注册表配置单元"HKEY_LOCAL_MACHINE“中检索到5个子项。
from _winreg import *
try:
i = 0
while True:
subkey = EnumKey(HKEY_LOCAL_MACHINE, i)
print subkey
i += 1
except WindowsError:
pass我的问题是,我如何枚举这些项下的键?我想最后列出SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged文件夹中的所有密钥,但我不知道如何才能一步步走到那里。
作为对第一条评论的回应,我在我的机器上运行了这段代码,虽然它没有出错,但也没有产生结果。
from _winreg import *
aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE)
aKey = OpenKey(aReg, r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged")
for i in range(1024):
try:
keyname = EnumKey(aKey, i)
asubkey = OpenKey(aKey, keyname)
val = QueryValueEx(asubkey, "Description")
print val
except WindowsError:
breakregedit或reg查询显示该文件夹中有6个值,但我无法获得python脚本来显示这6个值。
发布于 2019-03-20 21:50:55
我只想添加一个更具蟒蛇风格的解决方案。
from _winreg import *
from contextlib import suppress
import itertools
def subkeys(path, hkey=HKEY_LOCAL_MACHINE, flags=0):
with suppress(WindowsError), OpenKey(hkey, path, 0, KEY_READ|flags) as k:
for i in itertools.count():
yield EnumKey(k, i)现在,您可以按预期访问密钥
for key in subkeys(r'path\to\your\key'):
print key对于缺少suppress()的python版本< 3.4,我建议将其添加到项目中:
from contextlib import contextmanager
@contextmanager
def suppress(*exceptions):
try:
yield
except exceptions:
pass注意:如果您在读取某些值时遇到问题,则可能是从错误的注册表视图中读取的。将
KEY_WOW64_64KEY或KEY_WOW64_32KEY传递给flags参数)。在Python2.6中引入了使用OpenKey()作为上下文管理器。
发布于 2013-07-03 02:56:49
我没有相同的注册表项可供搜索,但以下代码将列出HKEY_LOCAL_MACHINE\Software中的所有子项。我认为如果您将keyVal字符串的值更改为您的目录,它将会起作用。
因为EnumKey将失败,所以try ... except阻塞是这样。我没有使用for循环,因为我不知道如何获得正确的aKey长度。
keyVal = r"Software"
aKey = OpenKey(HKEY_LOCAL_MACHINE, keyVal, 0, KEY_ALL_ACCESS)
try:
i = 0
while True:
asubkey = EnumKey(aKey, i)
print(asubkey)
i += 1
except WindowsError:
pass发布于 2013-11-22 11:12:38
像这样的东西能工作吗?
import _winreg
def subkeys(key):
i = 0
while True:
try:
subkey = _winreg.EnumKey(key, i)
yield subkey
i+=1
except WindowsError:
break
def traverse_registry_tree(key=_winreg.HKEY_LOCAL_MACHINE, tabs=0):
for k in subkeys(key):
print '\t'*tabs + str(k)
traverse_registry_tree(k, tabs+1)https://stackoverflow.com/questions/14350517
复制相似问题