Python 操作登錄檔

2021-09-01 21:05:59 字數 2682 閱讀 3660

通過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...