_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")