Python 操作註冊表

來源:互聯網
上載者:User
通過Python操作註冊表有兩種方式,第一種是通過Python的內建模組 _winreg;另一種方式就是Win32 Extension For Python 的win32api模組,但是需要進行額外的安裝。這裡主要給出一些_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 讀取 
 
1 import _winreg
2
3 key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer")
4
5  #擷取該鍵的所有索引值,因為沒有方法可以擷取索引值的個數,所以只能用這種方法進行遍曆
6  try:
7 i = 0
8 while1:
9 #EnumValue方法用來枚舉索引值,EnumKey用來枚舉子鍵
10   name, value, type = _winreg.EnumValue(key, i)
11 print repr(name),
12 i +=1
13  except WindowsError:
14 print
15
16  #如果知道鍵的名稱,也可以直接取值
17  value, type = _winreg.QueryValueEx(key, "EnableAutoTray")

 

1.2 建立、修改

 

1 import _winreg
2
3 key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer")
4
5 #刪除鍵
6 _winreg.DeleteKey(key, "Advanced")
7
8 #刪除索引值
9 _winreg.DeleteValue(key, "IconUnderline")
10
11 #建立新的鍵
12 newKey = _winreg.CreateKey(key,"MyNewkey")
13
14 #給新建立的鍵添加索引值
15 _winreg.SetValue(newKey,"ValueName",0,"ValueContent")

 

1.3 訪問遠端登錄

 

1 #第二參數必須是HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE等預先定義好的值,拿到返回的key後就可以進行操作了
2 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中通過補丁的形式修正了這個問題(http://bugs.python.org/issue7347)。

通過例子來說明一下這個問題,假設我們的作業系統是64位的,然後在上面安裝了32位的Python,看如下的Python代碼:

 

1 import _winreg
2
3 key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,r"Software\Microsoft\Windows")
4
5 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提供的方法來修改上面的代碼如下:

 

1 import win32api
2
3 import win32con
4
5 key = win32api.RegCreateKeyEx(win32con.HKEY_LOCAL_MACHINE, r"Software\Microsoft\Windows", win32con.WRITE_OWNER |win32con.KEY_WOW64_64KEY|win32con.KEY_ALL_ACCESS)
6 win32api.RegSetValueEx (key,"MyNewkey", 0, win32con.REG_SZ, keyValue)

 

上面的win32con.KEY_WOW64_64KEY意思就是直接存取64位註冊表,不要進行重新導向,預設的參數是win32con.KEY_WOW64_32KEY。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.