python 2.6创建volatile注册表项

时间:2016-01-08 10:39:11

标签: python registry

我正在尝试创建一个易失性的注册表项。

最初我曾尝试创建类似的东西,但它失败了

第一种方法

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

1 个答案:

答案 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中的密钥。