您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Python如何實現操縱控制windows注冊表的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
具體如下:
使用_winreg模塊的話
基本概念:
KEY 鍵
Value 值
函數和作用:
CloseKey() - 關閉一個Key
ConnectRegistry() - 鏈接到其他機器的注冊表
CreateKey() - 創建一個Key
DeleteKey() - 刪除一個Key
DeleteValue() - 刪除一個Key里面的值(value)
EnumKey() - 為已經打開的Key里面的子鍵建立索引
EnumValue() - 為打開的鍵中的值建立索引
FlushKey() - 回寫所有的鍵屬性改變到注冊表
LoadKey() - 從指定文件讀入鍵信息
OpenKey() - 打開一個鍵
OpenKeyEx()
QueryValue() - 在注冊表中檢索一個鍵的路徑
QueryValueEx() - 注冊表中檢索一個鍵的路徑
QueryInfoKey() - 返回關于鍵的信息
SaveKey() - 保存鍵到文件
SetValue() - 設置一個鍵
SetValueEx() - 設置一個值
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")
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")
3、 訪問遠程注冊表
#第二參數必須是HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE等預先定義好的值,拿到返回的key后就可以進行操作了 key = _winreg.ConnectRegisty("IP地址或者機器名",_winreg.HKEY_CURRENT_USER)
4、win32api
win32api 和 _winreg 的方法很類似,一般是多了一個前綴”Reg”,使用方法很基本上一樣,這里就不給具體的Demo代碼了。
就一般的應用來說,使用_winreg就足夠了,但是_winreg有一個問題,如果Python是32位的,并且是運行在64位的操作系統上時就會有一點小問題,由于操作系統會進行注冊表的重定向,32位的程序無法訪問64位應用程序的注冊表。在Python2.6以前這個問題都沒有解決,在Python2.7中通過補丁的形式修正了這個問題(http://bugs.python.org/issue7347)。
通過例子來說明一下這個問題,假設我們的操作系統是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如何實現操縱控制windows注冊表”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。