在Python中,我试图打开regedit键来向其添加字符串值。然而,它不知何故不承认OpenKey()或ConnectRegistry方法。
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)发布于 2014-11-05 16:46:37
由于您已经用import winreg导入了它,您需要使用winreg.xxxxxx引用名称空间内的所有方法。
因此,您需要使用winreg.OpenKey和winreg.ConnectRegistry。
或者,你也可以
from winreg import CreateKey, OpenKey, ConnectRegistry, etc这将允许您使用CreateKey等,而不需要winreg前缀。
发布于 2014-11-05 16:46:16
OpenKey函数位于winreg模块中。这意味着,为了访问它,您需要在它前面加上winreg.:
keyVal = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r"AppEvents\{Key2}", 0,KEY_WRITE)
# ^^^^^^^ConnectRegistry、SetValueEx和您从模块中使用的任何其他名称也是如此。您可以在文档中阅读有关此行为的信息。
如果没有指定其他名称,而且要导入的模块是顶级模块,则模块的名称在本地命名空间中绑定为对导入模块的引用
如您所见,导入模块只会使模块可用。其所有内容(全局/函数/类/等)仍然保留在模块的命名空间中。
或者,您可以导入您计划直接使用的名称:
from winreg import CreateKey, OpenKey, SetValueEx然后,您不需要在它们的前缀加上winreg.。但是,我建议您只在使用几个名称时才这样做。导入数十个类似的名称会导致代码丑陋和混乱的全局命名空间。
发布于 2020-03-23 06:42:00
添加用windows启动的脚本
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)https://stackoverflow.com/questions/26762511
复制相似问题