_winreg模块记录
python版本2.6

该模块用于在windows下对注册表进行一系列的操作
windows下打开注册表命令regedit
如此,我们不难发觉,注册表是一个树结构的数据对象
首先,我们对注册表进行操作前,得需要获得具体的句柄,这就与OpenKey()函数有关了:
-
- _winreg. OpenKey ( key, sub_key[, res[, sam]] )
-
Opens the specified key, returning a handle object.
key is an already open key, or any one of the predefined HKEY_* constants.
sub_key is a string that identifies the sub_key to open.
res is a reserved integer, and must be zero. The default is zero.
sam is an integer that specifies an access mask that describes the desired security access for the key. Default is KEY_READ. See Access Rights for other allowed values.
The result is a new handle to the specified key.
If the function fails, WindowsError is raised.
- 该函数包括两个必要参数和两个可选参数:
- key是一个已经打开的key,或者是注册表常量中的某一个值
- sub_key是一个字符串,比如上图所示,_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"SOFTWARE") 即可获得一个指 HKEY_LOCAL_MACHINE下的“SOFTWARE”对象的句柄
- res是一个保留的整型数据,必须是0,且默认是0
- sam是一个用来指明句柄对该key的访问权限的整型数据,默认是KEY_READ,要进行写操作时需要 KEY_WRITE或者KEY_ALL_ACCESS权限
- 获取了句柄之后,接下来的操作基本是增删改查:
_winreg.CreateKey(key,sub_key)
该函数用于在key下创建一个subkey,返回类型为一个指向subkey的操作句柄
_winreg.DeleteKey(key,sub_key)
该函数用于删除key下的指定subkey
_winreg.QueryInfoKey(key)
该函数用于获取key的相关信息,返回类型为tuple
分别为subkeys的个数、values的个数依旧修改时间
-
-
The result is a tuple of 3 items:
Index Meaning 0 An integer giving the number of sub keys this key has. 1 An integer giving the number of values this key has. 2 A long integer giving when the key was last modified (if available) as 100’s of nanoseconds since Jan 1, 1600.
-
_winreg.EnumKey(key,index)
该函数用于枚举获取key下的subkey,返回类型为handle(操作句柄),与
_winreg.QueryInfoKey(key)一起使用,即可实现对subkey的遍历
_winreg.CloseKey(hkey)
该函数用于关闭指向key的句柄
- 如下图所示,创建一个指向"7-Zip"的句柄后,右侧窗口中显示的就是values,每个value包括了name、type、data三部分
-
_winreg.SetValue(key,sub_key,type,value) 该函数用于设置subkey的未命名value的data,也就是上图所示中"(默认)"对应的"数值未设置",若subkey不存在则自动创建subkey
_winreg.SetValueEx(key,value_name,reserved,type,value) 该函数用于设置key中对应value_name的type和value
_winreg.EnumValue(key,index) 该函数用于枚举获取key下的values,返回类型为tuple,与_winreg.QueryInfoKey(key)一起使用即可实现对values的遍历
_winreg.QueryValue(key,sub_key) 该函数用于获取未命名的value的data,也就是上图所示中"(默认)"对应的"数值未设置"
_winreg.QueryValueEx(key,value_name) 该函数用于获取某个key中指定value的data和type,返回类型是tuple
-
-
Index Meaning 0 The value of the registry item. 1 An integer giving the registry type for this value (see table in docs for SetValueEx())
-
_winreg.DeleteValue(key,value)
该函数用于删除key下的指定value
- 以下demo为遍历key下的所有subkey及其velues
def registrytest(keypath): try: key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, keypath, 0, _winreg.KEY_ALL_ACCESS) i = _winreg.QueryInfoKey(key)[ 0] for j in range( 0, i): subkey_name = _winreg.EnumKey(key, j) print subkey_name subkey = _winreg.OpenKey(key, subkey_name) try: m = _winreg.QueryInfoKey(subkey)[1 ] print m for n in range( 0, m): print _winreg.EnumValue(subkey, n) displayname,d1 = _winreg.QueryValueEx(subkey, u"DisplayName" ) print displayname,d1 except Exception: print "exception" _winreg.CloseKey(subkey) except WindowsError: print "exception" finally: _winreg.CloseKey(key) pass
if __name__ == "__main__": print registrytest("SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\ Uninstall")