首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >读取注册表的Python代码

读取注册表的Python代码
EN

Stack Overflow用户
提问于 2011-03-08 08:50:07
回答 3查看 72.9K关注 0票数 24
代码语言:javascript
复制
from _winreg import *

"""print r"*** Reading from SOFTWARE\Microsoft\Windows\CurrentVersion\Run ***" """
aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE)

aKey = OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
for i in range(1024):
    try:
        asubkey=EnumKey(aKey,i)
        val=QueryValueEx(asubkey, "DisplayName")
        print val
    except EnvironmentError:
        break

谁能纠正这个错误...我只想在键HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall的子键中显示"DisplayName“这是我得到的错误..

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:/Python25/ReadRegistry", line 10, in <module>
    val=QueryValueEx(asubkey, "DisplayName")
TypeError: The object is not a PyHKEY object
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-08 09:46:26

DocumentationEnumKey返回带有密钥名称的字符串。您必须使用_winreg.OpenKey函数显式打开它。我已经修复了你的代码片段:

代码语言:javascript
复制
from _winreg import *

aKey = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
aReg = ConnectRegistry(None, HKEY_LOCAL_MACHINE)

print(r"*** Reading from %s ***" % aKey)

aKey = OpenKey(aReg, aKey)
for i in range(1024):
    try:
        asubkey_name = EnumKey(aKey, i)
        asubkey = OpenKey(aKey, asubkey_name)
        val = QueryValueEx(asubkey, "DisplayName")
        print(val)
    except EnvironmentError:
        break

请注意,并不是每个键都有"DisplayName“值。

票数 33
EN

Stack Overflow用户

发布于 2011-03-08 09:45:28

正如_winreg.QueryValueEx文档中所述,您需要传递一个已经打开的密钥。EnumKey返回一个字符串,而不是一个打开的键。

代码语言:javascript
复制
aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE)
aKey = OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
for i in range(1024):
    try:
        keyname = EnumKey(aKey, i)
        asubkey = OpenKey(aKey, keyname)
        val = QueryValueEx(asubkey, "DisplayName")
        print val
    except WindowsError:
        break
票数 5
EN

Stack Overflow用户

发布于 2019-09-24 03:40:46

创建了一个简单的程序来生成注册表中的子键列表。目前,正在尝试弄清楚如何在该列表中搜索特定的子项,然后在不存在的情况下添加它们,和/或更改值。(应该不会太难)这就是我想出来的。我希望它能有所帮助,也请随意批评它:

代码语言:javascript
复制
from winreg import *

registry = ConnectRegistry(None, HKEY_LOCAL_MACHINE)
def openRegistryA():

    rawKeyA = OpenKey(registry, "SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System")

    try:
        i = 0
        while 1:
            name, value, type = EnumValue(rawKeyA, i)
            print(name, value, i)
            i += 1

    except WindowsError:
        print("END")

    CloseKey(rawKeyA)

def openRegistryB():
    rawKeyB = OpenKey(registry, "SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters")

    try:
        i = 0
        while 1:
            name, value, type = EnumValue(rawKeyB, i)
            print(name, value, i)
            i += 1

    except WindowsError:
        print("END")

    CloseKey(rawKeyB)




openRegistryA()
openRegistryB()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5227107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档