如果可以,我在哪里可以下载_winreg for python3.我在E:\ Windows上有'windir'.我不知道cx_Freeze是否没有注意到这一点.我正在使用cx_Freeze创建一个msi安装程序.
我开发了一个python脚本,我有一个设置窗口,可以选择安装软件的路径.当点击设置窗口的OK按钮时,我想将所有选定的路径写入注册表并阅读设置窗口再次打开时相同.我的代码如下所示.
def OnOk(self, event):
data1=self.field1.GetValue() #path selected in setting window
aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE)
keyVal=OpenKey(aReg,r"SOFTWARE\my path to\Registry", 0,KEY_WRITE)
try:
SetValueEx(keyVal,"Log file",0,REG_SZ,data1)
except EnvironmentError:
pass
CloseKey(keyVal)
CloseKey(aReg)
Run Code Online (Sandbox Code Playgroud)
我收到如下错误:
Traceback (most recent call last):
File "D:\PROJECT\project.py", line 305, in OnOk
keyVal=OpenKey(aReg,r"SOFTWARE\my path to\Registry", 0,KEY_WRITE)
WindowsError: [Error 5] Access is denied
Run Code Online (Sandbox Code Playgroud)
从注册表中读取,保存的注册表必须显示在设置窗口中.我尝试使用下面的代码.虽然它的工作但不满意我的编程方式.帮我解决更好的解决方案
key = OpenKey(HKEY_CURRENT_USER, r'Software\my path to\Registry', 0, KEY_READ)
for i in range(4):
try:
n,v,t = EnumValue(key,i)
if i==0:
self.field2.SetValue(v)
elif i==1:
self.field3.SetValue(v)
elif i==2:
self.field4.SetValue(v)
elif i==3:
self.field1.SetValue(v)
except EnvironmentError:
pass
CloseKey(key)
Run Code Online (Sandbox Code Playgroud) 我 在使用Python 2.7.3 _winreg模块中的_winreg.QueryValueEx函数访问Windows 7注册表时遇到了一些问题.
我以管理员身份运行python进程,可以创建新的键和值,如下所示:
import _winreg as wreg
key = wreg.CreateKey(wreg.HKEY_LOCAL_MACHINE, "Software\\TestCompany\\TestProject")
# Create new subkey
wreg.SetValue(key, 'NewSubkey', wreg.REG_SZ, 'testsubkey')
print wreg.QueryValue(key, 'NewSubKey')
# prints 'testsubkey'
# Create new value
wreg.SetValueEx(key, 'ValueName', 0, wreg.REG_SZ, 'testvalue')
print wreg.QueryValueEx(key,'ValueName')
# prints (u'testvalue', 1)
key.Close()
Run Code Online (Sandbox Code Playgroud)

但是,当我重新打开相同的密钥并尝试设置值时,它会给我一个Access is denied错误:
key = wreg.OpenKey(wreg.HKEY_LOCAL_MACHINE, "Software\\TestCompany\\TestProject",wreg.KEY_SET_VALUE)
wreg.SetValue(key, 'NewSubkey', wreg.REG_SZ, 'subkey_changed')
print wreg.QueryValue(key, 'NewSubkey')
# prints 'subkey_changed'
wreg.SetValueEx(key, 'ValueName', 0, wreg.REG_SZ, 'value_changed')
Traceback (most recent call last):
File "<pyshell#43>", …Run Code Online (Sandbox Code Playgroud) 我正在尝试访问Windows注册表(在Python中)使用_winreg查询键值,我无法使其工作.以下行返回一个WindowsError,指出"系统找不到指定的文件":
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, _winreg.KEY_ALL_ACCESS)
Run Code Online (Sandbox Code Playgroud)
经过几个小时的尝试,看起来Python无法超越路径的"Maya"部分(看起来像"2012\......等......"子路径是"不可见的"或不存在的).现在我打开了注册表编辑器,我保证在HKLM中有这样的路径.我在Windows 7 64bit上.知道我做错了什么吗?这让我疯了.谢谢...
我在阅读由我的软件创建的注册表项时遇到困难.但是使用相同的代码,我可以读取其他键.
installdir = winreg.OpenKey(
winreg.HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\MediaPlayer\\Player\\Extensions\\Types"
) #this works perfect
#installdir1 = winreg.OpenKey(
winreg.HKEY_LOCAL_MACHINE,
"SOFTWARE\\MySoftware\\MyEvent\\IS"
) #this gives Filenotfound error
# list values owned by this registry key
try:
i = 0
while 1:
name, value, type = winreg.EnumValue(installdir, i)
print (repr(name))
i += 1
except WindowsError:
print ("Bot donf")
value, type = winreg.QueryValueEx(installdir, "10")
print("user is", repr(value))
value, type = winreg.QueryValueEx(winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\MySoftware\\MyEvent\\IS"), "v2")
print("user is", repr(value))
Run Code Online (Sandbox Code Playgroud)
追溯显示
Traceback (most recent call last):
File "D:/python_scripts/myclass.py", line 32, in <module>
value, …Run Code Online (Sandbox Code Playgroud) 我将如何通过循环所有的值使用Python模块_winreg一个Windows注册表项.我的代码将执行我想要的操作,但它适用于指定注册表项的子项.
这是代码:
from _winreg import *
t = OpenKey(HKEY_CURRENT_USER, r"PATH TO KEY", 0, KEY_ALL_ACCESS)
try:
i = 0
while True:
subkey = EnumValue(t, i)
print subkey
i += 1
except WindowsError:
# WindowsError: [Errno 259] No more data is available
pass
Run Code Online (Sandbox Code Playgroud)
哦,想通了.但是,如果有人知道另一种方法,我仍然会接受这个答案!
当我尝试从此键读取值时,不会返回此键的正确值,而是获得不同的键路径值?
import _winreg as wreg
key = wreg.OpenKey(wreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run")
print(wreg.EnumValue(key, 0))
Run Code Online (Sandbox Code Playgroud)
并输出:
('SunJavaUpdateSched', u'"C:\\Program Files (x86)\\Common Files\\Java\\Java Update\\jusched.exe"', 1)
Run Code Online (Sandbox Code Playgroud)
但是这个值不是我用过的钥匙的一部分?这个值不在这个键上,我应该得到一个不同的值.我在RegEdit及其位于的位置搜索了值的位置
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
Run Code Online (Sandbox Code Playgroud)
当我使用命令提示符
REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Run Code Online (Sandbox Code Playgroud)
我得到了正确的输出......
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
IgfxTray REG_SZ "C:\Windows\system32\igfxtray.exe"
HotKeysCmds REG_SZ "C:\Windows\system32\hkcmd.exe"
Persistence REG_SZ "C:\Windows\system32\igfxpers.exe"
Run Code Online (Sandbox Code Playgroud)
然后我会尝试在python上使用os.popen ...
import os
buff = os.popen("REG QUERY HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run")
print(buff.read())
Run Code Online (Sandbox Code Playgroud)
和输出
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
SunJavaUpdateSched REG_SZ "C:\Program Files (x86)\Common Files\Java\Java Update\jusched.exe"
Run Code Online (Sandbox Code Playgroud)
为什么这些不同?如何使用正确的值_winreg?
我能够使用下面的代码从我的Windows 7机器注册表配置单元"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
Run Code Online (Sandbox Code Playgroud)
我的问题是,我如何枚举那些键?我想最终列出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:
break
Run Code Online (Sandbox Code Playgroud)
一个regedit或reg查询显示该文件夹中的6个值,但是我无法获得一个python脚本来向我显示这六个值.
我试图让我的python脚本在启动时运行,但我得到错误消息windowserror访问被拒绝,但我应该能够启动程序启动因为teamviewer(我下载的第三方程序)运行每次我重新启动我的电脑所以我知道我应该能够让我的程序在启动时运行(我可能会做一些不同的事情,所以如果你能够了解一下teamviewer做什么不同以使其脚本在启动时运行会有所帮助) .
这是我的剧本
import _winreg, webbrowser
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,'Software\Microsoft\Windows\CurrentVersion\Run')
_winreg.SetValueEx(key,'pytest',0,_winreg.REG_BINARY,'C:\Users\"USERNAME"\Desktop\test.py')
key.Close()
webbrowser.open('www.youtube.com')
Run Code Online (Sandbox Code Playgroud)
任何输入都表示赞赏.
我正在尝试通过 python 脚本删除某些注册表项。
我从“HKEY_CURRENT_USER”读取和删除键没有问题,但尝试从“HKEY_LOCAL_MACHINE”执行相同操作,却出现了可怕的WindowsError: [Error 5] Access is returned。
我正在通过 IDLE IDE 运行该脚本,并具有管理员权限。
这是代码:
from _winreg import *
ConnectRegistry(None,HKEY_LOCAL_MACHINE)
OpenKey(HKEY_LOCAL_MACHINE,r'software\wow6432node\App',0,KEY_ALL_ACCESS)
DeleteKey(OpenKey(HKEY_LOCAL_MACHINE,r'software\wow6432node'),'App')
Run Code Online (Sandbox Code Playgroud) winreg ×10
python ×8
registry ×5
python-2.7 ×2
cx-freeze ×1
enumeration ×1
python-3.x ×1
startup ×1
windows ×1
windows-7 ×1