利用python讀取windows注冊(cè)表的方法詳解
在windows系統(tǒng)中,注冊(cè)表 是系統(tǒng)定義的數(shù)據(jù)庫,應(yīng)用程序和系統(tǒng)組件在其中存儲(chǔ)和檢索配置數(shù)據(jù)。
注冊(cè)表是一個(gè)分層數(shù)據(jù)庫,其中包含對(duì) Windows本身以及Windows上運(yùn)行的應(yīng)用程序和服務(wù)至關(guān)重要的數(shù)據(jù)。 因此我們還是不好進(jìn)行隨意操作,但是查看注冊(cè)表的信息可以讓我們更加了解系統(tǒng)的運(yùn)行情況。
數(shù)據(jù)以樹格式進(jìn)行結(jié)構(gòu)化。樹中的每個(gè)節(jié)點(diǎn)稱為鍵。每個(gè)鍵可以同時(shí)包含子項(xiàng)和數(shù)據(jù)條目,稱為值。
通過查看注冊(cè)表的數(shù)據(jù)我們可以發(fā)現(xiàn)一些比較有趣的系統(tǒng)信息。比如我們可以通過注冊(cè)表看到用戶定義的環(huán)境變量

也可以查看菜單在文件夾空白處右鍵的菜單操作。

以下是使用python3對(duì)注冊(cè)表進(jìn)行讀取的代碼。
import winreg
def enumerate_registry_values(key, sub_key):
"""
枚舉注冊(cè)表鍵中的所有值
:param key_path: 注冊(cè)表鍵路徑
"""
# key 可以是一個(gè)打開的key,或者winreg預(yù)定義的值HKEY_* constants
try:
reg_key = winreg.OpenKey(key, sub_key, 0, winreg.KEY_READ)
except OSError:
print(f"can't open key {key}/{sub_key}")
return
values = []
index = 0
while True:
try:
# 枚舉值
value_name, value_data, value_type = winreg.EnumValue(reg_key, index)
values.append((value_name, value_data, value_type))
index += 1
except OSError:
# 當(dāng)沒有更多值時(shí)跳出循環(huán)
break
winreg.CloseKey(key)
print(f"枚舉值成功 - 路徑: {key}{sub_key}, 值數(shù)量: {len(values)}")
for name, data, type_ in values:
print(f" 名稱: {name}, 值: {data}, 類型: {type_}")
print("基于注冊(cè)表查看用戶環(huán)境變量")
# 查看用戶定義的環(huán)境變量路徑是:HKEY_CURRENT_USER\Environment
enumerate_registry_values(winreg.HKEY_CURRENT_USER,"Environment")
def get_children_key_names(key, sub_key):
"""
獲取key的子節(jié)點(diǎn)的key
并且以數(shù)組返回
"""
# key 可以是一個(gè)打開的key,或者winreg預(yù)定義的值HKEY_* constants
reg_key = winreg.OpenKey(key, sub_key, 0, winreg.KEY_READ)
sub_key_names = []
index = 0
while True:
try:
# 枚舉值
sub_key_name = winreg.EnumKey(reg_key, index)
sub_key_names.append(sub_key_name)
index += 1
except OSError:
# 當(dāng)沒有更多值時(shí)跳出循環(huán)
break
winreg.CloseKey(key)
return sub_key_names
print("基于注冊(cè)表查看對(duì)文件夾右鍵菜單的操作")
# 遍歷路徑:\HKEY_CLASSES_ROOT\Directory\Background\shell,查看針對(duì)文件夾中空白處右鍵菜單的操作
sub_key_names=get_children_key_names(winreg.HKEY_CLASSES_ROOT,r"Directory\Background\shell")
for sub_key_name in sub_key_names:
# 菜單的操作在command的值中
enumerate_registry_values(winreg.HKEY_CLASSES_ROOT,r'Directory\Background\shell\\'+""+sub_key_name+r"\command")
輸出如下:

方法補(bǔ)充
python操作注冊(cè)表的方法及應(yīng)用
1.打開注冊(cè)表
可以使用winreg模塊的OpenKey()方法打開注冊(cè)表。該方法的參數(shù)是一個(gè)表示注冊(cè)表項(xiàng)的句柄和一個(gè)表示要打開的子項(xiàng)的名稱的字符串。如果要打開的子項(xiàng)不存在,將會(huì)拋出一個(gè)WindowsError異常。
下面是打開注冊(cè)表的示例代碼:
import winreg # 打開HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer鍵 key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer')
在上面的代碼中,我們首先使用winreg.HKEY_CURRENT_USER常量表示HKEY_CURRENT_USER根鍵。然后使用winreg.OpenKey()方法打開注冊(cè)表項(xiàng)Software\Microsoft\Windows\CurrentVersion\Explorer,并將結(jié)果保存在變量key中。
2.讀取注冊(cè)表值
可以使用winreg模塊的QueryValue()方法讀取注冊(cè)表值。該方法的參數(shù)是一個(gè)表示注冊(cè)表項(xiàng)的句柄和一個(gè)表示要讀取的值的名稱的字符串。如果要讀取的值不存在,將會(huì)拋出一個(gè)WindowsError異常。
下面是讀取注冊(cè)表值的示例代碼:
import winreg # 打開HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer鍵 key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer') # 讀取StartPage鍵的值 value = winreg.QueryValue(key, 'StartPage') print(value)
在上面的代碼中,我們首先使用winreg.OpenKey()方法打開注冊(cè)表項(xiàng)Software\Microsoft\Windows\CurrentVersion\Explorer,并將結(jié)果保存在變量key中。然后使用winreg.QueryValue()方法讀取StartPage鍵的值,并將結(jié)果保存在變量value中。最后打印value的值。
3.寫入注冊(cè)表值
可以使用winreg模塊的SetValue()方法寫入注冊(cè)表值。該方法的參數(shù)是一個(gè)表示注冊(cè)表項(xiàng)的句柄、一個(gè)表示要寫入的值的名稱的字符串和一個(gè)表示要寫入的值的類型的常量。如果要寫入的值已存在,將會(huì)覆蓋原有的值。
下面是寫入注冊(cè)表值的示例代碼:
import winreg # 打開HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer鍵 key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer', 0, winreg.KEY_WRITE) # 寫入TestValue鍵的值 winreg.SetValue(key, 'TestValue', winreg.REG_SZ, 'Hello, World!')
在上面的代碼中,我們首先使用winreg.OpenKey()方法打開注冊(cè)表項(xiàng)Software\Microsoft\Windows\CurrentVersion\Explorer,并將結(jié)果保存在變量key中。然后使用winreg.SetValue()方法寫入TestValue鍵的值。需要注意的是,我們需要將要寫入的值的類型作為winreg.SetValue()方法的第三個(gè)參數(shù)傳入,并使用常量表示類型。
4. 關(guān)閉注冊(cè)表
在操作注冊(cè)表之后,我們需要關(guān)閉注冊(cè)表??梢允褂脀inreg模塊的CloseKey()方法關(guān)閉注冊(cè)表。該方法的參數(shù)是一個(gè)表示注冊(cè)表項(xiàng)的句柄。
下面是關(guān)閉注冊(cè)表的示例代碼:
import winreg # 打開HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer鍵 key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer') # 關(guān)閉注冊(cè)表 winreg.CloseKey(key)
在上面的代碼中,我們首先使用winreg.OpenKey()方法打開注冊(cè)表項(xiàng)Software\Microsoft\Windows\CurrentVersion\Explorer,并將結(jié)果保存在變量key中。然后使用winreg.CloseKey()方法關(guān)閉注冊(cè)表。
5.python 讀取注冊(cè)表項(xiàng)值
import winreg # 導(dǎo)入winreg庫
reg_path = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer" # 注冊(cè)表路徑
reg_key_name = "Shell Folders" # 要讀取的具體項(xiàng)名
try:
reg_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, reg_path) # 打開注冊(cè)表項(xiàng)
value, regtype = winreg.QueryValueEx(reg_key, reg_key_name) # 讀取注冊(cè)表項(xiàng)的值
except WindowsError as e: # 捕捉 Windows 錯(cuò)誤
print(f"發(fā)生錯(cuò)誤: {e}") # 輸出錯(cuò)誤信息
else:
print(f"讀取到的值: {value}") # 輸出注冊(cè)表項(xiàng)的值
finally:
winreg.CloseKey(reg_key) # 關(guān)閉注冊(cè)表項(xiàng)到此這篇關(guān)于利用python讀取windows注冊(cè)表的方法詳解的文章就介紹到這了,更多相關(guān)python讀取windows注冊(cè)表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python?gravis庫實(shí)現(xiàn)圖形數(shù)據(jù)可視化實(shí)例探索
這篇文章主要為大家介紹了python?gravis庫實(shí)現(xiàn)圖形數(shù)據(jù)可視化實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02
Python爬蟲requests模塊之URL地址中的參數(shù)解讀
這篇文章主要介紹了Python爬蟲requests模塊之URL地址中的參數(shù)解讀,在你拿到數(shù)據(jù)所在的url地址之后,發(fā)送網(wǎng)絡(luò)請(qǐng)求時(shí),請(qǐng)求的url中包含兩種地址參數(shù):查詢參數(shù)和請(qǐng)求參數(shù),需要的朋友可以參考下2023-08-08
解決使用Spyder IDE時(shí)matplotlib繪圖的顯示問題
這篇文章主要介紹了解決使用Spyder IDE時(shí)matplotlib繪圖的顯示問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Python無限循環(huán)的產(chǎn)生原因與避免方法
本文詳細(xì)剖析了無限循環(huán)的產(chǎn)生原因、表現(xiàn)特征及五大產(chǎn)生原因,并提供了四大避免策略:防御性循環(huán)設(shè)計(jì)、調(diào)試與監(jiān)控、代碼審查與靜態(tài)分析、重構(gòu)為for循環(huán),通過真實(shí)代碼示例和可視化圖表,幫助開發(fā)者掌握防止和解決無限循環(huán)的方法,提升代碼健壯性,需要的朋友可以參考下2026-04-04
一文淺析如何創(chuàng)建內(nèi)網(wǎng)PyPI鏡像站點(diǎn)
這篇文章主要為大家詳細(xì)介紹了如何創(chuàng)建內(nèi)網(wǎng)PyPI鏡像站點(diǎn),這是一個(gè)常見的企業(yè)級(jí)需求,用于內(nèi)網(wǎng)環(huán)境中的Python包管理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-09-09

