本文實(shí)例講述了Python實(shí)現(xiàn)操縱控制windows注冊(cè)表的方法。分享給大家供大家參考,具體如下:
使用_winreg模塊的話
基本概念:
- KEY 鍵
- Value 值
函數(shù)和作用:
CloseKey()
- 關(guān)閉一個(gè)Key
ConnectRegistry()
- 鏈接到其他機(jī)器的注冊(cè)表
CreateKey()
- 創(chuàng)建一個(gè)Key
DeleteKey()
- 刪除一個(gè)Key
DeleteValue()
- 刪除一個(gè)Key里面的值(value)
EnumKey()
- 為已經(jīng)打開(kāi)的Key里面的子鍵建立索引
EnumValue()
- 為打開(kāi)的鍵中的值建立索引
FlushKey()
- 回寫(xiě)所有的鍵屬性改變到注冊(cè)表
LoadKey()
- 從指定文件讀入鍵信息
OpenKey()
- 打開(kāi)一個(gè)鍵
OpenKeyEx()
QueryValue()
- 在注冊(cè)表中檢索一個(gè)鍵的路徑
QueryValueEx()
- 注冊(cè)表中檢索一個(gè)鍵的路徑
QueryInfoKey()
- 返回關(guān)于鍵的信息
SaveKey()
- 保存鍵到文件
SetValue()
- 設(shè)置一個(gè)鍵
SetValueEx()
- 設(shè)置一個(gè)值
1、讀取
import _winreg key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer") #獲取該鍵的所有鍵值,因?yàn)闆](méi)有方法可以獲取鍵值的個(gè)數(shù),所以只能用這種方法進(jìn)行遍歷 try: i = 0 while1: #EnumValue方法用來(lái)枚舉鍵值,EnumKey用來(lái)枚舉子鍵 name, value, type = _winreg.EnumValue(key, i) print repr(name), i +=1 except WindowsError: print #如果知道鍵的名稱,也可以直接取值 value, type = _winreg.QueryValueEx(key, "EnableAutoTray")
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")
3、 訪問(wèn)遠(yuǎn)程注冊(cè)表
#第二參數(shù)必須是HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE等預(yù)先定義好的值,拿到返回的key后就可以進(jìn)行操作了 key = _winreg.ConnectRegisty("IP地址或者機(jī)器名",_winreg.HKEY_CURRENT_USER)
4、win32api
win32api 和 _winreg 的方法很類似,一般是多了一個(gè)前綴”Reg”,使用方法很基本上一樣,這里就不給具體的Demo代碼了。
就一般的應(yīng)用來(lái)說(shuō),使用_winreg就足夠了,但是_winreg有一個(gè)問(wèn)題,如果Python是32位的,并且是運(yùn)行在64位的操作系統(tǒng)上時(shí)就會(huì)有一點(diǎn)小問(wèn)題,由于操作系統(tǒng)會(huì)進(jìn)行注冊(cè)表的重定向,32位的程序無(wú)法訪問(wèn)64位應(yīng)用程序的注冊(cè)表。在Python2.6以前這個(gè)問(wèn)題都沒(méi)有解決,在Python2.7中通過(guò)補(bǔ)丁的形式修正了這個(gè)問(wèn)題(http://bugs.python.org/issue7347)。
通過(guò)例子來(lái)說(shuō)明一下這個(gè)問(wèn)題,假設(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í)行不會(huì)像預(yù)想那樣創(chuàng)建如下的鍵:
“ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows ”
而是會(huì)創(chuàng)建如下的鍵:
“ HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows ”
因?yàn)樵?4位的windows操作系統(tǒng)下,64位的程序和32位程序的注冊(cè)表是分開(kāi)的,32位應(yīng)用程序?qū)ψ?cè)表的操作(讀、寫(xiě))都會(huì)被重定向到Wow6432Node下面, 64位應(yīng)用程序的訪問(wèn)注冊(cè)表的行為則沒(méi)有變化。因此如果我們的32位應(yīng)用程序確實(shí)要訪問(wèn)64位程序所用到的注冊(cè)表的話,就會(huì)有點(diǎn)問(wèn)題。由于_winreg本身的問(wèn)題,它對(duì)這種情況的支持不太充分,對(duì)windows api的封裝有一些bug,這個(gè)時(shí)候就需要用到 win32api 模塊。
下面用win32api提供的方法來(lái)修改上面的代碼如下:
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意思就是直接訪問(wèn)64位注冊(cè)表,不要進(jìn)行重定向,默認(rèn)的參數(shù)是win32con.KEY_WOW64_32KEY。
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python文件與目錄操作技巧匯總》、《Python文本文件操作技巧匯總》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
