我正在尝试创建一个易失性的注册表项。
最初我曾尝试创建类似的东西,但它失败了
第一种方法
aReg = ConnectRegistry(None, HKEY_CURRENT_USER)
key = CreateKey(HKEY_CURRENT_USER, volatilePath)
Registrykey= OpenKey(HKEY_CURRENT_USER, volatilePath, 0, KEY_WRITE)
SetValueEx(Registrykey,"pid", 0, REG_SZ, "1234")
CloseKey(Registrykey)
第二种方法
aReg = ConnectRegistry(None, HKEY_CURRENT_USER)
key = CreateKey(HKEY_CURRENT_USER, volatilePath)
Registrykey= OpenKey(HKEY_CURRENT_USER, volatilePath, 0, KEY_WRITE)
SetValueEx(Registrykey, "pid", 0, REG_SZ|REG_OPTION_VOLATILE, "1234")
CloseKey(Registrykey)
最后看到密钥不能正常工作(作为普通密钥工作),我想调用specified here的Windows本机函数。我是Python的新手。任何帮助将受到高度赞赏。
更新:最新方法(仍无效)
from ctypes import windll
from _winreg import *
import win32api
p=PySECURITY_ATTRIBUTES(None, None)
advapi32 = windll.LoadLibrary ( 'advapi32.dll' )
win32api.RegCreateKeyEx(HKEY_CURRENT_USER, u"Volatile Environment", 0, None, REG_OPTION_VOLATILE, KEY_ALL_ACCESS | KEY_WOW64_32KEY, p )
Registrykey= OpenKey(HKEY_CURRENT_USER, volatilePath, 0, KEY_WRITE)
SetValueEx(Registrykey, "pid", 0, REG_SZ, "1234")
我在这里收到错误,
TypeError: 'NoneType' object is not callable
答案 0 :(得分:2)
如果您需要标准库解决方案,请使用ctypes。但是,如果向项目添加外部依赖项是可以接受的,我建议改为使用PyWin32的win32api.RegCreateKeyEx
,尤其是如果您没有C语言经验。对于pip安装,PyWin32在PyPI上可用pypiwin32 ,但它不适用于Python 2.6。如果可能,您应该升级到最新版本的Python 2.7。
PyWin32示例:
import winnt
import win32api
import win32con
hKey, flag = win32api.RegCreateKeyEx(
win32con.HKEY_CURRENT_USER,
'Volatile Environment',
win32con.KEY_ALL_ACCESS,
Options=winnt.REG_OPTION_VOLATILE)
win32api.RegSetValueEx(hKey, 'pid', 0, winnt.REG_SZ, '1234')
仅供参考,KEY_WOW64_32KEY
hive不需要HKEY_CURRENT_USER
访问权限。 WOW64重定向仅影响HKEY_LOCAL_MACHINE
中的密钥。