通過python操作登錄檔有兩種方式,第一種是通過python的內建模組 _winreg;另一種方式就是win32 extension for python 的win32api模組,但是需要進行額外的安裝。這裡主要給出一些_winreg和win32api的demo**。
1、 _winrg
可以參考官方的參考文件:
1.1 讀取
import _winreg
key = _winreg.openkey(_winreg.hkey_current_user,r"software\microsoft\windows\currentversion\explorer")
#獲取該鍵的所有鍵值,因為沒有方法可以獲取鍵值的個數,所以只能用這種方法進行遍歷
try:
i = 0
while1:
#enumvalue方法用來列舉鍵值,enumkey用來列舉子鍵
name, value, type = _winreg.enumvalue(key, i)
print repr(name),
i +=1
except windowserror:
print
#如果知道鍵的名稱,也可以直接取值
value, type = _winreg.queryvalueex(key, "enableautotray")
1.2 建立、修改
import _winreg
key = _winreg.openkey(_winreg.hkey_current_user,r"software\microsoft\windows\currentversion\explorer")
#刪除鍵
_winreg.deletekey(key, "advanced")
#刪除鍵值
_winreg.deletevalue(key, "iconunderline")
#建立新的鍵
newkey = _winreg.createkey(key,"mynewkey")
#給新建立的鍵新增鍵值
_winreg.setvalue(newkey,"valuename",0,"valuecontent")
1.3 訪問遠端登錄檔
#第二引數必須是hkey_current_user、hkey_local_machine等預先定義好的值,拿到返回的key後就可以進行操作了
key = _winreg.connectregisty("ip位址或者機器名",_winreg.hkey_current_user)
2、 win32api
win32api 和 _winreg 的方法很類似,一般是多了乙個字首"reg",使用方法很基本上一樣,這裡就不給具體的demo**了。
就一般的應用來說,使用_winreg就足夠了,但是_winreg有乙個問題,如果python是32位的,並且是執行在64位的作業系統上時就會有一點 小問題,由於作業系統會進行登錄檔的重定向,32位的程式無法訪問64位應用程式的登錄檔。在python2.6以前這個問題都沒有解決,在 python2.7中通過補丁的形式修正了這個問題(
通過例子來說明一下這個問題,假設我們的作業系統是64位的,然後在上面安裝了32位的python,看如下的python**:
import _winreg
key = _winreg.openkey(_winreg.hkey_local_machine,r"software\microsoft\windows")
newkey = _winreg.createkey(key,"mynewkey")
上面的**的執行不會像預想那樣建立如下的鍵:
"hkey_local_machine\software\microsoft\windows"
而是會建立如下的鍵:
"hkey_local_machine\software\wow6432node\microsoft\windows"
因為在64位的windows作業系統下,64位的程式和32位程式的登錄檔是分開的,32位應用程式對登錄檔的操作(讀、寫)都會被重定向到 wow6432node下面, 64位應用程式的訪問登錄檔的行為則沒有變化。因此如果我們的32位應用程式確實要訪問64位程式所用到的登錄檔的話,就會有點問題。由於_winreg 本身的問題,它對這種情況的支援不太充分,對windows api的封裝有一些bug,這個時候就需要用到 win32api 模組。
下面用win32api提供的方法來修改上面的**如下:
import win32api
import win32con
key = win32api.regcreatekeyex(win32con.hkey_local_machine, r"software\microsoft\windows", win32con.write_owner |win32con.key_wow64_64key|win32con.key_all_access)
win32api.regsetvalueex (key,"mynewkey", 0, win32con.reg_sz, keyvalue)
上面的win32con.key_wow64_64key意思就是直接訪問64位登錄檔,不要進行重定向,預設的引數是win32con.key_wow64_32key。 Python 操作登錄檔
通過python的內建模組winreg這裡主要給出一些winreg的demo python2 import winreg python3 import winreg python37 coding utf 8 coding utf 8 import winreg def obtain 獲取該鍵的所有...
登錄檔操作
近來由於需要在自己寫的程式中對登錄檔進行操作。總結些經驗,並做個乙個demo供日後使用,現在把它拿出來和大家分享 小弟初學vc,有誤之處還請賜教。為了使用方便,我把一些操作寫成了函式,以便方便呼叫,具體 如下所示 一 定義 hkey hkey char content 256 所查詢登錄檔鍵值的內容...
登錄檔操作
2005年10月29日 19 29 00 一 寫入 1.建立檔案 建立乙個註冊 式檔案 reg,內容如下 windows registry editor version 5.00 hkey local machine software test server 192.168.66.22 databa...