溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python如何實(shí)現(xiàn)操縱控制windows注冊表

發(fā)布時(shí)間:2021-04-07 10:21:25 來源:億速云 閱讀:174 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Python如何實(shí)現(xiàn)操縱控制windows注冊表的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

具體如下:

使用_winreg模塊的話

基本概念:

  • KEY 鍵

  • Value 值

函數(shù)和作用:

CloseKey() - 關(guān)閉一個(gè)Key
ConnectRegistry() - 鏈接到其他機(jī)器的注冊表
CreateKey() - 創(chuàng)建一個(gè)Key
DeleteKey() - 刪除一個(gè)Key
DeleteValue() - 刪除一個(gè)Key里面的值(value)
EnumKey() - 為已經(jīng)打開的Key里面的子鍵建立索引
EnumValue() - 為打開的鍵中的值建立索引
FlushKey() - 回寫所有的鍵屬性改變到注冊表
LoadKey() - 從指定文件讀入鍵信息
OpenKey() - 打開一個(gè)鍵
OpenKeyEx()
QueryValue() - 在注冊表中檢索一個(gè)鍵的路徑
QueryValueEx() - 注冊表中檢索一個(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)闆]有方法可以獲取鍵值的個(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")

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、 訪問遠(yuǎn)程注冊表

#第二參數(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)用來說,使用_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如何實(shí)現(xiàn)操縱控制windows注冊表”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI