操作Windows注冊表的簡單的Python程序制作教程
通過Python操作注冊表有兩種方式,第一種是通過Python的內(nèi)置模塊 _winreg;另一種方式就是Win32 Extension For Python 的win32api模塊,但是需要進(jìn)行額外的安裝。這里主要給出一些_winreg和win32api的Demo代碼。
1、 _winrg
可以參考官方的參考文檔:
http://docs.python.org/library/_winreg.html
http://www.python.org/doc/2.6.2/library/_winreg.html
1.1 讀取
import _winreg
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer")
#獲取該鍵的所有鍵值,因?yàn)闆]有方法可以獲取鍵值的個(gè)數(shù),所以只能用這種方法進(jìn)行遍歷
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 創(chuàng)建修改
import _winreg key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer") #刪除鍵 _winreg.DeleteKey(key, "Advanced") #刪除鍵值 _winreg.DeleteValue(key, "IconUnderline") #創(chuàng)建新的鍵 newKey = _winreg.CreateKey(key,"MyNewkey") #給新創(chuàng)建的鍵添加鍵值 _winreg.SetValue(newKey,"ValueName",0,"ValueContent")
1.3 訪問遠(yuǎn)程注冊表
1 #第二參數(shù)必須是HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE等預(yù)先定義好的值,拿到返回的key后就可以進(jìn)行操作了
2 key = _winreg.ConnectRegisty("IP地址或者機(jī)器名",_winreg.HKEY_CURRENT_USER)
2、 win32api
win32api 和 _winreg 的方法很類似,一般是多了一個(gè)前綴"Reg",使用方法很基本上一樣,這里就不給具體的Demo代碼了。
就一般的應(yīng)用來說,使用_winreg就足夠了,但是_winreg有一個(gè)問題,如果Python是32位的,并且是運(yùn)行在64位的操作系統(tǒng)上時(shí)就會有一點(diǎn)小問題,由于操作系統(tǒng)會進(jìn)行注冊表的重定向,32位的程序無法訪問64位應(yīng)用程序的注冊表。在Python2.6以前這個(gè)問題都沒有解決,在Python2.7中通過補(bǔ)丁的形式修正了這個(gè)問題(http://bugs.python.org/issue7347)。
通過例子來說明一下這個(gè)問題,假設(shè)我們的操作系統(tǒng)是64位的,然后在上面安裝了32位的Python,看如下的Python代碼:
import _winreg key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,r"Software\Microsoft\Windows") newKey = _winreg.CreateKey(key,"MyNewkey")
上面的代碼的執(zhí)行不會像預(yù)想那樣創(chuàng)建如下的鍵:
"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows"
而是會創(chuàng)建如下的鍵:
"HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows"
因?yàn)樵?4位的windows操作系統(tǒng)下,64位的程序和32位程序的注冊表是分開的,32位應(yīng)用程序?qū)ψ员淼牟僮鳎ㄗx、寫)都會被重定向到Wow6432Node下面, 64位應(yīng)用程序的訪問注冊表的行為則沒有變化。因此如果我們的32位應(yīng)用程序確實(shí)要訪問64位程序所用到的注冊表的話,就會有點(diǎn)問題。由于_winreg本身的問題,它對這種情況的支持不太充分,對windows api的封裝有一些bug,這個(gè)時(shí)候就需要用到 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位注冊表,不要進(jìn)行重定向,默認(rèn)的參數(shù)是win32con.KEY_WOW64_32KEY。
相關(guān)文章
Python找出最小的K個(gè)數(shù)實(shí)例代碼
這篇文章主要介紹了Python找出最小的K個(gè)數(shù)實(shí)例代碼,簡單分析了實(shí)現(xiàn)思路,冒泡法和partition思想,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Python的爬蟲框架scrapy用21行代碼寫一個(gè)爬蟲
最近在學(xué)習(xí)Python的爬蟲框架scrapy,通過爬取線報(bào)網(wǎng)站后發(fā)現(xiàn)整個(gè)過程還是挺值得學(xué)習(xí)的,所以下面這篇文章主要就給大家介紹了Python的爬蟲框架scrapy利用21行代碼寫一個(gè)爬蟲的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04
python實(shí)現(xiàn)21點(diǎn)小游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)21點(diǎn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
Python中os.path.join函數(shù)的用法舉例詳細(xì)講解
這篇文章主要介紹了Python中os.path.join函數(shù)用法的相關(guān)資料,os.path.join函數(shù)用于拼接路徑,根據(jù)操作系統(tǒng)自動選擇分隔符,它可以處理不同參數(shù)的情況,包括絕對路徑、空字符串和以特定字符開始的參數(shù),需要的朋友可以參考下2025-02-02
python串口如何讀取byte類型數(shù)據(jù)并訪問
這篇文章主要介紹了python串口如何讀取byte類型數(shù)據(jù)并訪問方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09

