您好,登錄后才能下訂單哦!
本篇內容主要講解“Python如何操作注冊表”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python如何操作注冊表”吧!
進入系統注冊表的方法多種多樣,最常見的就是運行窗口輸入命令“regedit”,即可進入注冊表:
注冊表中的幾個菜單分別對應機器的根目錄登陸的用戶信息和本地機器信息以及用戶信息和本地配置信息等。
在Python中就有這么一個神奇的模塊,它可以用來操作注冊表。它就是-----"winreg",一個Python自帶的操作注冊表的模塊。
import winreg
”winreg“總有很多有用的方法,基本上就是操作注冊表中的鍵值,我們挑幾個重要的來說說。首先我們來了解下”winreg“中的各個常量:
winreg.HKEY_CLASSES_ROOT #存儲應用和shell的信息 winreg.HKEY_CURRENT_USER #當前用戶自定義的信息 winreg.HKEY_LOCAL_MACHINE #計算機系統所有的信息 winreg.HKEY_USERS #所有用戶信息 winreg.HKEY_PERFORMANCE_DATA #性能數據 winreg.HKEY_CURRENT_CONFIG #本地計算機系統的硬件配置文件 winreg.HKEY_DYN_DATA #windows98后的版本無法使用
winreg.KEY_ALL_ACCESS #所有權限 winreg.KEY_WRITE #可寫 winreg.KEY_READ #可讀 winreg.KEY_EXECUTE #可執行相當于KEY_READ winreg.KEY_QUERY_VALUE #查詢注冊表鍵值 winreg.KEY_SET_VALUE #創建、刪除或設置一組注冊表值 winreg.KEY_CREATE_SUB_KEY #創建一個注冊表子項的注冊表鍵 winreg.KEY_ENUMERATE_SUB_KEYS #枚舉注冊表子項所需的注冊表鍵 winreg.KEY_NOTIFY #修改注冊表鍵時的提示 winreg.KEY_CREATE_LINK #創建一個鏈接,預留給系統用
winreg.KEY_WOW64_64KEY #在64位Windows應用程序應該運行在64位注冊表視圖 winreg.KEY_WOW64_32KEY #在64位Windows應用程序應該運行在32位注冊表視圖
winreg.REG_BINARY #任何形式的二進制數據 winreg.REG_DWORD #32位的數 winreg.REG_DWORD_LITTLE_ENDIAN #32位的數字在低位優先的格式,相當于REG_DWORD winreg.REG_DWORD_BIG_ENDIAN #32位的數字在高位優先的格式 winreg.REG_EXPAND_SZ #以null結尾的字符串包含環境變量的引用(% %) winreg.REG_LINK #Unicode符號鏈接 winreg.REG_MULTI_SZ #一個以null結尾的字符串序列,由兩個空字符結束 winreg.REG_NONE #沒有定義的值類型 winreg.REG_QWORD #64位的數 winreg.REG_QWORD_LITTLE_ENDIAN #在低位優先一個64位的數字格式,相當于REG_QWORD winreg.REG_RESOURCE_LIST #設備驅動器資源列表 winreg.REG_FULL_RESOURCE_DESCRIPTOR #硬件設置 winreg.REG_RESOURCE_REQUIREMENTS_LIST #硬件資源列表 winreg.REG_SZ #一個以null結尾的字符串
reg=winreg.ConnectRegistry('\\計算機名',winreg.HKEY_LOCAL_MACHINE)#返回值是所開打鍵的句柄 #第一個參數是指遠程計算機名,第二個參數是指注冊表中的鍵,如HKEY_LOCAL_MACHINE,它是winreg中的常量。
不過我們在這里要注意的是,如果遠程注冊表沒有系統管理員權限,是無法正常訪問注冊表的。所以我們先要判斷下它的訪問權限。這里就要用到我們之前講的"ctypes"模塊中的判斷用戶是否是管理員用戶的方法了。
import ctypes import sys def admin(): aa=ctypes.windll.shell32.IsUserAnAdmin() return aa if admin()==1: #有管理員權限可打開遠程注冊表 winreg.ConnectRegistry('\\計算機名',winreg.HKEY_LOCAL_MACHINE) else: if sys.version_info[0]==3: #python版本是3以上的版本 ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1) else: #python2 版本 ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)
連接之后我們不想用了,就要隨手把它給關閉了,也很簡單,只要拿到打開注冊表的句柄,就可以關閉了。
winreg.CloseKey(reg)
可以看到句柄的值不一樣。
其實還有一種方法,就是利用注冊處理對象的方法來關閉。
reg.Close()
注冊對象還支持上下文和分離處理對象周期:
reg.detach() #返回一個整數,記錄當前對象的生命周期,如果關閉注冊句柄對象,那么則為0
#打開指定的鍵,返回一個處理對象 winreg.OpenKey(key, sub_key, reserved=0, access=winreg.KEY_READ) winreg.OpenKeyEx(key, sub_key, reserved=0, access=winreg.KEY_READ) #key:HKEY_ 常量 #sub_key:指定鍵的子鍵 #reserved:一個保留的證書,必須是零。默認值為零 #access:訪問權限
winreg.CreateKey(key,sub_key) winreg.CreateKeyEx(key,sub_key,reserved=0,access=winreg.KEY_WRITE) #key:HKEY_ 常量 #sub_key:指定鍵的子鍵 #reserved:一個保留的證書,必須是零。默認值為零 #access:訪問權限
winreg.DeleteKey( key,sub_key) #不能刪除帶有子項的鍵 winreg.DeleteKeyEx(key,sub_key,reserved=0,access=winreg.KEY_WOW64_64KEY)#不能刪除帶有子項的鍵 winreg.DeleteValue(key, value)#從某個注冊鍵中刪除一個命名值項 #用法與上面相同,只是結果是刪除罷了
可以看到”cnm“已經被刪除了。如果鍵不存在,刪除會報錯。
winreg.EnumKey(key,index) #枚舉打開的注冊表鍵的子鍵,并返回一個字符串 winreg.EnumValue(key,index)#枚舉打開的注冊表鍵值,并返回一個元組 #index:一個整數,用于標識所獲取鍵的索引
winreg.FlushKey(key) #同步某個鍵的所有屬性寫入注冊表
winreg.LoadKey(key,sub_key,file_name) #file_name:讀取注冊表的數據的文件名
winreg.QueryInfoKey(key) #返回一個3元素元組的鍵的信息 winreg.QueryValue(key,sub_key) #用一個字符串來檢索一個鍵的值 winreg.QueryValueEx(key,value_name) #檢索與開放權限的注冊表鍵相關聯的指定值的數據類型和名稱
winreg.SaveKey(key, file_name) #保存指定的鍵和所有指定文件的注冊表子項
winreg.DisableReflectionKey(key) #禁用 winreg.EnableReflectionKey(key) #啟用
winreg.QueryReflectionKey(key) #結果為True 則表示禁用
winreg.SetValue(key, sub_key, type, value) #添加鍵和值 winreg.SetValueEx(key,value_name,reserved,type,value)#將數據存儲在一個開放的注冊表鍵值字段 #value_name:該字符串名稱的注冊表子鍵 #type:值類型 #value:子鍵的鍵值
可以看出它們的區別,而且前者值類型只能指定為“winreg.REG_SZ”,而后者什么類型都可以。
前面我們介紹了"winreg"幾乎所有的方法,現在我們就來具體做一個應用練練手,就拿我們的360安全衛士為例,我們嘗試著通過注冊表先找到它的位置然后打開它。那么接下來小編開始表演了:
1)).打開系統注冊表編輯器,然后進行搜索關鍵字:
2)).定位到注冊表路徑
3).打開注冊表鍵
通過我們找到的子鍵然后對其進行查找操作,得到處理對象的句柄“reg”
reg=winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\360安全衛士")
4).找到應用的絕對路徑并打印
通過數值名稱找到數值數據,
path=winreg.QueryValueEx(reg,'DisplayIcon')
這樣就找到了這個應用的絕對路徑了,返回值是一個元祖,我們使用索引訪問:
path[0]
可以看到我們已經成功打印出了我們要找的應用程序的絕對路徑了,接下來就可以愉快的打開它了。打開的方法多種多樣,什么“os”,“subprocess”,"ctypes","pywin32",一大堆的方法,不過小編還是覺得“os”最方便。
os.popen(path[0])
最后別忘了關閉對象處理句柄哦。
#兩種方法都可以關閉 winreg.CloseKey(reg) reg.Close()
利用”winreg“可以完成很多騷操作,你也可以通過注冊表設置系統開機啟動項以及其它操作,如果你想往黑客方面發展的話。
到此,相信大家對“Python如何操作注冊表”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。