首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NameError:名称'OpenKey‘不是使用winreg定义的

NameError:名称'OpenKey‘不是使用winreg定义的
EN

Stack Overflow用户
提问于 2014-11-05 16:44:14
回答 3查看 2.5K关注 0票数 0

在Python中,我试图打开regedit键来向其添加字符串值。然而,它不知何故不承认OpenKey()ConnectRegistry方法。

代码语言:javascript
复制
import winreg
import sys
#Create 2 keys with unique GUIDs as Names

KeyName1 = "AppEvents\{Key1}"
KeyName2 = "AppEvents\{Key2}"
KeyName1_Path = "C:\Install\Monitor\Path.asmtx"


winreg.CreateKey(winreg.HKEY_CURRENT_USER, KeyName1)
winreg.CreateKey(winreg.HKEY_CURRENT_USER,  KeyName2)

#Add String as Path
# aReg = ConnectRegistry(None,HKEY_CURRENT_USER) #NameError: name 'ConnectRegistry' is not defined

keyVal=OpenKey(winreg.HKEY_CURRENT_USER,r"AppEvents\{Key2}", 0,KEY_WRITE) ameError: name 'OpenKey' is not defined


SetValueEx(keyVal,"Path",0,REG_SZ, KeyName1_Path)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-05 16:46:37

由于您已经用import winreg导入了它,您需要使用winreg.xxxxxx引用名称空间内的所有方法。

因此,您需要使用winreg.OpenKeywinreg.ConnectRegistry

或者,你也可以

代码语言:javascript
复制
from winreg import CreateKey, OpenKey, ConnectRegistry, etc

这将允许您使用CreateKey等,而不需要winreg前缀。

票数 2
EN

Stack Overflow用户

发布于 2014-11-05 16:46:16

OpenKey函数位于winreg模块中。这意味着,为了访问它,您需要在它前面加上winreg.

代码语言:javascript
复制
keyVal = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r"AppEvents\{Key2}", 0,KEY_WRITE)
#        ^^^^^^^

ConnectRegistrySetValueEx和您从模块中使用的任何其他名称也是如此。您可以在文档中阅读有关此行为的信息。

如果没有指定其他名称,而且要导入的模块是顶级模块,则模块的名称在本地命名空间中绑定为对导入模块的引用

如您所见,导入模块只会使模块可用。其所有内容(全局/函数/类/等)仍然保留在模块的命名空间中。

或者,您可以导入您计划直接使用的名称:

代码语言:javascript
复制
from winreg import CreateKey, OpenKey, SetValueEx

然后,您不需要在它们的前缀加上winreg.。但是,我建议您只在使用几个名称时才这样做。导入数十个类似的名称会导致代码丑陋和混乱的全局命名空间。

票数 1
EN

Stack Overflow用户

发布于 2020-03-23 06:42:00

添加用windows启动的脚本

代码语言:javascript
复制
import os,sys
import winreg as reg
def addStartup():  
    fp = os.path.dirname(os.path.realpath(__file__))
    file_name = sys.argv[0].split('\\')[-1]
    new_file_path = fp + '\\' + file_name
    keyVal = r'Software\Microsoft\Windows\CurrentVersion\Run'
    key2change = reg.OpenKey(reg.HKEY_CURRENT_USER, keyVal, 0, reg.KEY_ALL_ACCESS)
    reg.SetValueEx(key2change, 'CustomProgramName', 0, reg.REG_SZ,new_file_path)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26762511

复制
相关文章

相似问题

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