利用Python讀取並操作註冊表

利用Python讀取並操作註冊表

一、Python與註冊表相關的庫
winreg(主要) win32api
二、註冊表結構:鍵、值
三、winreg——訪問Windows註冊表

1.模塊功能:
winreg.closeKey(hkey)
關閉以前打開的註冊表項。在HKEY參數指定以前打開的關鍵。
注意:如果使用此方法(或通過)未關閉hkeyhkey.Close(),則在Python銷燬hkey對象時將關閉hkey。
winreg.ConnectRegistry(computer_name,key)
建立與另一臺計算機上的預定義註冊表句柄的連接,並返回一個句柄對象。
computer_name是表單的遠程計算機的名稱 r"\computername"。如果None使用本地計算機。
key是要連接的預定義句柄。
返回值是已打開鍵的句柄。如果函數失敗, OSError則引發異常。
winreg.CreateKey(key,sub_key)
創建或打開指定的鍵,返回一個句柄對象。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
sub_key是一個字符串,用於命名此方法打開或創建的鍵。
如果key是預定義鍵之一,則sub_key可以是None。在這種情況下,返回的句柄是傳遞給函數的相同鍵句柄。
如果密鑰已存在,則此函數將打開現有密鑰。
返回值是已打開鍵的句柄。如果函數失敗, OSError則引發異常。
winreg.CreateKeyEx(key,sub_key,reserved = 0,access = KEY_WRITE )
創建或打開指定的鍵,返回一個 句柄對象。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
sub_key是一個字符串,用於命名此方法打開或創建的鍵。
reserved是保留的整數,必須爲零。默認值爲零。
access是一個整數,指定一個訪問掩碼,用於描述密鑰的所需安全訪問。默認是KEY_WRITE。請參閱 其他允許值的訪問權限。
如果key是預定義鍵之一,則sub_key可以是None。在這種情況下,返回的句柄是傳遞給函數的相同鍵句柄。
如果密鑰已存在,則此函數將打開現有密鑰。
返回值是已打開鍵的句柄。如果函數失敗, OSError則引發異常。
winreg.DeleteKey(key,sub_key )
刪除指定的密鑰。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
sub_key是一個字符串,必須是key 參數標識的鍵的子鍵。該值不能是None,鍵可能沒有子鍵。
此方法無法使用子鍵刪除鍵。
如果方法成功,則刪除整個鍵,包括其所有值。如果方法失敗,OSError則會引發異常。
winreg.DeleteKeyEx(key,sub_key,access = KEY_WOW64_64KEY,reserved = 0 )
刪除指定的密鑰。
注意:該DeleteKeyEx()函數使用RegDeleteKeyEx Windows API函數實現,該函數特定於64位版本的Windows。請參閱RegDeleteKeyEx文檔。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
sub_key是一個字符串,必須是key參數標識的鍵的子 鍵。該值不能是None,鍵可能沒有子鍵。
reserved是保留的整數,必須爲零。默認值爲零。
access是一個整數,指定一個訪問掩碼,用於描述密鑰的所需安全訪問。默認是KEY_WOW64_64KEY。請參閱其他允許值的訪問權限。
此方法無法使用子鍵刪除鍵。
如果方法成功,則刪除整個鍵,包括其所有值。如果方法失敗,OSError則會引發異常。
在不受支持的Windows版本上,NotImplementedError引發了。
winreg.DeleteValue(鍵,值)
從註冊表項中刪除命名值。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
value是一個標識要刪除的值的字符串。
winreg.EnumKey(鍵,索引)
枚舉打開的註冊表項的子項,返回一個字符串。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
index是一個整數,用於標識要檢索的鍵的索引。
該函數每次調用時都會檢索一個子項的名稱。通常會重複調用它,直到引發OSError異常,表明沒有更多值可用。
winreg.EnumValue(鍵,索引)
枚舉打開的註冊表項的值,返回元組。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
index是一個整數,用於標識要檢索的值的索引。
該函數每次調用時都會檢索一個子項的名稱。通常會重複調用它,直到引發OSError異常,表示不再有值。
結果是3項的元組:
指數 含義
0 標識值名稱的字符串
1 保存值數據的對象,其類型取決於基礎註冊表類型
2 一個標識值數據類型的整數

winreg.ExpandEnvironmentStrings(str )
%NAME%在字符串中擴展環境變量佔位符,例如 REG_EXPAND_SZ:

winreg.FlushKey(關鍵)
將密鑰的所有屬性寫入註冊表。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
沒有必要致電FlushKey()更改密鑰。註冊表使用其惰性刷新器將註冊表更改刷新到磁盤。註冊表更改也會在系統關閉時刷新到磁盤。與此不同CloseKey(),該 FlushKey()方法僅在所有數據都已寫入註冊表時返回。只有FlushKey()在絕對確定註冊表更改在磁盤上時,應用程序才應調用。
注意:如果不知道是否需要FlushKey()呼叫,則可能不是。
winreg.LoadKey(key,sub_key,file_name )
在指定的鍵下創建一個子鍵,並將指定文件中的註冊信息存儲到該子項中。
key是由ConnectRegistry()常量HKEY_USERS或其中一個返回的句柄HKEY_LOCAL_MACHINE。
sub_key是一個標識要加載的子項的字符串。
file_name是要從中加載註冊表數據的文件的名稱。必須使用該SaveKey()函數創建此文件。在文件分配表(FAT)文件系統下,文件名可能沒有擴展名。
要在通話LoadKey()如果調用進程沒有失敗 SE_RESTORE_PRIVILEGE的特權。請注意,權限與權限不同 - 有關詳細信息,請參閱RegLoadKey文檔。
如果key是返回的句柄ConnectRegistry(),則file_name中指定的路徑相對於遠程計算機。
winreg.OpenKey(key,sub_key,reserved = 0,access = KEY_READ )
winreg.OpenKeyEx(key,sub_key,reserved = 0,access = KEY_READ )
打開指定的鍵,返回一個句柄對象。

key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
sub_key是一個標識要打開的sub_key的字符串。
reserved是保留的整數,必須爲零。默認值爲零。
access是一個整數,指定一個訪問掩碼,用於描述密鑰的所需安全訪問。默認是KEY_READ。
結果是指定鍵的新句柄。
如果函數失敗,OSError則引發。
winreg.QueryInfoKey(關鍵)
返回有關鍵的信息,作爲元組。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
結果是3項的元組:
指數 含義
0 一個整數,給出該鍵具有的子鍵數。
1 一個整數,給出該鍵具有的值的數量。
2 上次修改密鑰(如果可用)時的整數,自1601年1月1日起爲100納秒。

winreg.QueryValue(key,sub_key )
以字符串形式檢索鍵的未命名值。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
sub_key是一個字符串,其中包含與其關聯的子鍵的名稱。如果此參數爲None或爲空,則該函數將檢索由SetValue()key標識的鍵的方法設置的值。
註冊表中的值包含名稱,類型和數據組件。此方法檢索鍵的第一個具有NULL名稱的值的數據。但是底層API調用不會返回類型,因此QueryValueEx()請儘可能使用 。
winreg.QueryValueEx(key,value_name )
檢索與打開的註冊表項關聯的指定值名稱的類型和數據。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
value_name是一個字符串,指示要查詢的值。
結果是2項的元組:
指數 含義
0 註冊表項的值。
1 給出此值的註冊表類型的整數(請參閱docs中的表 SetValueEx())

winreg.SaveKey(key,file_name )
將指定的鍵及其所有子鍵保存到指定的文件中。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
file_name是要將註冊表數據保存到的文件的名稱。此文件尚不存在。如果此文件名包含擴展名,則不能通過該方法在文件分配表(FAT)文件系統上使用它LoadKey() 。
如果key表示遠程計算機上的密鑰,則file_name描述的路徑 相對於遠程計算機。此方法的調用者必須具有SeBackupPrivilege安全權限。請注意,權限與權限不同 - 有關詳細信息,請參閱“ 用戶權限和權限之間的 衝突”文檔。
此函數將security_attributes的 NULL傳遞給API。
winreg.SetValue(key,sub_key,type,value )
將值與指定鍵關聯。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
sub_key是一個字符串,用於命名與其關聯的子鍵。
type是一個整數,指定數據的類型。目前必須這樣 REG_SZ,意味着只支持字符串。使用該SetValueEx() 功能支持其他數據類型。
value是一個指定新值的字符串。
如果sub_key參數指定的鍵不存在,則SetValue函數會創建它。
值長度受可用內存的限制。應將長值(超過2048個字節)存儲爲文件名,文件名存儲在配置註冊表中。這有助於註冊表有效地執行。
必須已通過訪問權限打開由key參數 標識的密鑰KEY_SET_VALUE。
winreg.SetValueEx(key,value_name,reserved,type,value )
將數據存儲在打開的註冊表項的值字段中。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
value_name是一個字符串,用於命名與該值關聯的子項。
保留可以是任何內容 - 零始終傳遞給API。
type是一個整數,指定數據的類型。有關可用類型,請參閱 值類型。
value是一個指定新值的字符串。
此方法還可以爲指定的鍵設置其他值和類型信息。必須已通過KEY_SET_VALUE訪問權限打開由key參數標識的密鑰 。
要打開密鑰,請使用CreateKey()或OpenKey()方法。
值長度受可用內存的限制。應將長值(超過2048個字節)存儲爲文件名,文件名存儲在配置註冊表中。這有助於註冊表有效地執行。
winreg.DisableReflectionKey(關鍵)
禁用在64位操作系統上運行的32位進程的註冊表反射。
key是一個已經打開的鍵,或者是一個預定義的HKEY_ *常量。
NotImplementedError如果在32位操作系統上執行,通常會提高。
如果該鍵不在反射列表中,則該函數成功但無效。禁用鍵的反射不會影響任何子鍵的反射。
winreg.EnableReflectionKey(關鍵)
恢復指定的禁用密鑰的註冊表反射。
key是一個已經打開的鍵,或者是一個預定義的HKEY_ *常量。
NotImplementedError如果在32位操作系統上執行,通常會提高。
恢復鍵的反射不會影響任何子鍵的反射。
winreg.QueryReflectionKey(關鍵)
確定指定鍵的反射狀態。
key是一個已經打開的鍵,或者是一個預定義的 HKEY_ *常量。
True如果禁用反射則返回。
NotImplementedError如果在32位操作系統上執行,通常會提高。
2.常數
定義了以下常量以用於許多_winreg函數。
HKEY_ *常數
winreg.HKEY_CLASSES_ROOT
從屬於此鍵的註冊表項定義文檔的類型(或類)以及與這些類型關聯的屬性。Shell和COM應用程序使用此密鑰下存儲的信息。
winreg.HKEY_CURRENT_USER
從屬於此鍵的註冊表項定義當前用戶的首選項。這些首選項包括環境變量的設置,有關程序組的數據,顏色,打印機,網絡連接和應用程序首選項。
winreg.HKEY_LOCAL_MACHINE
從屬於此鍵的註冊表項定義計算機的物理狀態,包括有關總線類型,系統內存以及已安裝的硬件和軟件的數據。
winreg.HKEY_USERS
從屬於此鍵的註冊表項定義本地計算機上新用戶的默認用戶配置和當前用戶的用戶配置。
winreg.HKEY_PERFORMANCE_DATA
從屬於此密鑰的註冊表項允許您訪問性能數據。數據實際上並未存儲在註冊表中; 註冊表函數使系統從其源收集數據。
winreg.HKEY_CURRENT_CONFIG
包含有關本地計算機系統的當前硬件配置文件的信息。
winreg.HKEY_DYN_DATA
在98之後的Windows版本中不使用此密鑰。
winreg.KEY_QUERY_VALUE
查詢註冊表項的值所必需的。
註冊表值類型可查閱:
https://docs.microsoft.com/zh-cn/windows/win32/sysinfo/registry-value-types
winreg.KEY_SET_VALUE
創建,刪除或設置註冊表值所必需的。
winreg.KEY_CREATE_SUB_KEY
創建註冊表項的子項時需要。
winreg.KEY_ENUMERATE_SUB_KEYS
枚舉註冊表項的子項所必需的。
winreg.KEY_NOTIFY
需要請求註冊表項或註冊表項的子項的更改通知。
winreg.KEY_CREATE_LINK
保留供系統使用。
winreg.KEY_WOW64_64KEY
表示64位Windows上的應用程序應在64位註冊表視圖上運行。
winreg.KEY_WOW64_32KEY
表示64位Windows上的應用程序應在32位註冊表視圖上運行。
winreg.REG_BINARY
任何形式的二進制數據。
winreg.REG_DWORD
32位數。
winreg.REG_DWORD_LITTLE_ENDIAN
小端格式的32位數字。相當於REG_DWORD。
winreg.REG_DWORD_BIG_ENDIAN
大端格式的32位數字。
winreg.REG_EXPAND_SZ
以空值終止的字符串,包含對環境變量的引用(%PATH%)。
winreg.REG_LINK
Unicode符號鏈接。
winreg.REG_MULTI_SZ
一系列以null結尾的字符串,以兩個空字符結尾。(Python自動處理此終止。)
winreg.REG_NONE
沒有定義的值類型。
winreg.REG_QWORD
一個64位的數字。
winreg.REG_QWORD_LITTLE_ENDIAN
小端格式的64位數字。相當於REG_QWORD。
winreg.REG_RESOURCE_LIST
設備驅動程序資源列表。
winreg.REG_FULL_RESOURCE_DESCRIPTOR
硬件設置。
winreg.REG_RESOURCE_REQUIREMENTS_LIST
硬件資源列表。
winreg.REG_SZ
以null結尾的字符串。
3.註冊表處理對象
此對象包裝Windows HKEY對象,在對象被銷燬時自動關閉它。爲了保證清理,可以調用 Close()對象上的方法或CloseKey()函數。
此模塊中的所有註冊表函數都返回其中一個對象。
此模塊中接受句柄對象的所有註冊表函數也接受整數,但是,鼓勵使用句柄對象。
句柄對象提供語義__bool__()- 因此

Yes如果句柄當前有效(尚未關閉或分離),將輸出。
該對象還支持比較語義,因此如果它們都引用相同的基礎Windows句柄值,則句柄對象將比較true。
句柄對象可以轉換爲整數(例如,使用內置 int()函數),在這種情況下,返回基礎Windows句柄值。您還可以使用該Detach()方法返回整數句柄,還可以斷開Windows句柄與句柄對象的連接。
PyHKEY.Close()
關閉基礎Windows句柄。
如果句柄已經關閉,則不會引發錯誤。
PyHKEY.Detach()
從句柄對象中分離Windows句柄。
結果是一個整數,它在分離之前保存句柄的值。如果手柄已經分離或關閉,則返回零。
調用此函數後,句柄實際上無效,但句柄未關閉。當您需要在句柄對象的生命週期之外存在基礎Win32句柄時,可以調用此函數。
PyHKEY.enter()
PyHKEY.exit(* exc_info )
HKEY對象實現__enter__()並 exit()因此支持該with語句的上下文協議 :

當控件離開塊時,將自動關閉鍵with。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章