windows註冊表

1、歷史

Windows註冊表是幫助Windows控制硬件、軟件、用戶環境和Windows界面的一套數據文件,註冊表包含在Windows目錄下兩個文件system.dat和user.dat裏,還有它們的備份system.da0和user.da0。經過Windows目錄下的regedit.exe程序能夠存取註冊表數據庫。在之前,在windows的更早版本(在Win95之前),這些功能是靠win.ini,system.ini和其餘與應用程序有關聯的.ini文件來實現的。html

在windows操做系統家族中,system.ini和win.ini這兩個文件包含了操做系統全部的控制功能和應用程序的信息,system.ini管理計算機硬件而win.ini管理桌面和應用程序。全部驅動、字體、設置和參數會保存在.ini文件中,任何新程序都會被記錄在.ini文件中。這些記錄會在程序代碼中被引用。由於受win.ini和system.ini文件大小的限制,程序員添加輔助的.INI文件以用來控制更多的應用程序。舉例來講,微軟的Excel有一個office excel.ini文件,它包含着選項、設置、缺省參數和其餘關係到Excel運行正常的信息。在system.ini和win.ini中只須要指出excel.ini的路徑和文件名便可。程序員

早在Dos和Win3.x的時代,大部分的應用程序都是採用了 ini 文件(初始化文件)來保存一些配置信息,如設置路徑,環境變量等。system.ini和win.ini控制着全部windows和應用程序的特徵和存取方法,它在少數的用戶和少數應用程序的環境中工做的很好。隨着應用程序的數量和複雜性愈來愈大,則須要在.ini文件中添加更多的參數項。shell

這樣下來,在一個變化的環境中,在應用程序安裝到系統中後,每一個人都會更改.ini文件。然而,沒有一我的在刪除應用程序後刪除.ini文件中的相關設置,因此system.ini和win.ini這個兩個文件會變的愈來愈大。每增長的內容會致使系統性能愈來愈慢。並且每次應用程序的升級都出現這樣的難題:升級會增長更多的參數項可是歷來不去掉舊的設置。並且還有一個明顯的問題,一個.ini文件的最大尺寸是64KB。爲了解決這個問題,軟件商本身開始支持本身的.ini文件,而後指向特定的ini文件如win.ini和system.ini文件。這樣下來多個.ini文件影響了系統正常的存取級別設置。若是一個應用程序的.ini文件和WIN.INI文件設置起衝突,到底是誰的優先級更高呢?數據庫

註冊表最初被設計爲一個應用程序的數據文件相關參考文件,最後擴展成對於32位操做系統和應用程序包括了全部功能下的東東。註冊表是一套控制操做系統外表和如何響應外來事件工做的文件。這些「事件」的範圍從直接存取一個硬件設備到接口如何響應特定用戶到應用程序如何運行等等。註冊表由於它的目的和性質變的很複雜,它被設計爲專門爲32位應用程序工做,文件的大小被限制在大約40MB。利用一個功能強大的註冊表數據庫來統一集中地管理系統硬件設施,軟件配置等信息,從而方便了管理,加強了系統的穩定性。最直觀的一個實例就是,爲何windows下的不一樣用戶能夠擁有各自的個性化設置,如不一樣的牆紙,不一樣的桌面。這就是經過註冊表來實現的。express

因而可知,註冊表(Registry)是Windows9x/Me/NT/2000操做系統、硬件設備以及客戶應用程序得以正常運行和保存設置的核心「數據庫」;是一個巨大的樹狀分層的數據庫。它記錄了用戶安裝在機器上的軟件和每一個程序的相互關聯關係;它包含了計算機的硬件配置,包括自動配置的即插即用的設備和已有的各類設備說明、狀態屬性以及各類狀態信息和數據等。windows

2、註冊表的做用

註冊表是爲Windows NT和Windows95中全部32位硬件/驅動和32位應用程序設計的數據文件。16位驅動在Windows NT下沒法工做,因此全部設備都經過註冊表來控制,通常這些是經過BIOS來控制的。在Win9x下,16位驅動會繼續以實模式方式設備工做,它們使用system.ini來控制。16位應用程序會工做在NT或者Win9x 下,它們的程序仍然會參考win.ini和system.ini文件得到信息和控制。數組

在沒有註冊表的狀況下,操做系統不會得到必須的信息來運行和控制附屬的設備和應用程序及正確響應用戶的輸入。瀏覽器

在系統中註冊表是一個記錄32位驅動的設置和位置的數據庫。當操做系統須要存取硬件設備,它使用驅動程序,甚至設備是一個BIOS支持的設備。無BIOS支持的設備安裝時必須須要驅動,這個驅動是獨立於操做系統的,可是操做系統須要知道從哪裏找到它們,文件名、版本號、其餘設置和信息,沒有註冊表對設備的記錄,它們就不能被使用。安全

當一個用戶準備運行一個應用程序,註冊表提供應用程序信息給操做系統,這樣應用程序能夠被找到,正確數據文件的位置被規定,其餘設置也均可以被使用。cookie

註冊表保存關於缺省數據和輔助文件的位置信息、菜單、按鈕條、窗口狀態和其餘可選項。它一樣也保存了安裝信息(好比說日期),安裝軟件的用戶,軟件版本號和日期,序列號等。根據安裝軟件的不一樣,它包括的信息也不一樣。

然而,通常來講,註冊表控制全部32位應用程序和驅動,控制的方法是基於用戶和計算機的,而不依賴於應用程序或驅動,每一個註冊表的參數項控制了一個用戶的功能或者計算機功能。用戶功能可能包括了桌面外觀和用戶目錄。因此,計算機功能和安裝的硬件和軟件有關,對因此用戶來講項都是公用的。

有些程序功能對用戶有影響,有些時做用於計算機而不是爲我的設置的,一樣的,驅動多是用戶指定的,但在不少時候,它們在計算機中是通用的。

3、註冊表的結構

WINDOWS的註冊表有六大根鍵,至關於一個硬盤被分紅了六個分區。
在「運行」對話框中輸入RegEdit,而後單擊「肯定」按鈕,則能夠運行註冊表編輯器。
Windows 98中文版的註冊表Registry(System.dat、User.dat、Config.pol)的數據組織結構。

註冊表的根鍵共六個。這些根鍵都是大寫的,並以HKEY_爲前綴。這種命令約定是以Win32 API的Registry函數的關鍵字的符號變量爲基礎的。
註冊表就是一顆大樹,樹的葉子節點包含三項:名稱-類型-值。
數據類型有六種:字符串值,二進制值,32位值,64位值,多字符串值,可擴充字符串值。
根鍵:系統定義的配置單元,經過"HKEY_"來表示。

  • HKEY_CLASSES_ROOT:定義了系統中全部已經註冊的文件擴展名、文件類型、文件圖標等。
  • HKEY_CURRENT_USER:定義了當前用戶的全部權限,實際上就是HKEY_USER.Defalut下面的一部份內容,包含了當前用戶的登陸信息。
  • HKEY_LOCAL_MACHINE:定義了本地計算機(相對網絡環境而言)的軟硬件的所有信息。當系統的配置和設置發生變化時,其下面的登陸項也會隨之改變
  • HKEY_USER:定義了全部的用戶信息,其中部分分支將映射到HKEY_CURRNET_USRE關鍵字中,它的大部分設置均可以經過控制面板來修改。
  • HKEY_CURRENT_CONFIG:定義了計算機的當前配置狀況,如顯示器、打印機等可選外設及其設置信息等。實際上也是指向HKEY_LOCAL_MACHINE\Config結構中的某個分支的指針。

雖然在註冊表中,六個根鍵看上去處於一種並列的地位,彼此毫無關係。但事實上,HKEY_CLASSES_ROOT和HKEY_CURRENT_CONFIG中存放的信息都是HKEY_LOCAL_MACHINE中存放的信息的一部分,而HKEY_CURRENT_USER中存放的信息只是HKEY_USERS存放的信息的一部分。

HKEY_LOCAL_MACHINE包括HKEY_CLASSES_ROOT和HKEY_CURRENT_USER中全部的信息。在每次系統啓動後,系統就映射出HKEY_CURRENT_USER中的信息,使得用戶能夠查看和編輯其中的信息。

實際上,HKEY_LOCAL_MACHINE\SOFTWARE\Classes就是HKEY_CLASSES_ROOT,爲了用戶便於查看和編輯,系統專門把它做爲一個根鍵。同理,HKEY_CURRENT_CONFIG\SY-STEM\Current Control就是HKEY_LOCAL_MACHINE\SYSTEM\Current Control。

HKEY_USERS中保存了默認用戶和當前登陸用戶的用戶信息。HKEY_CURRENT_USER中保存了當前登陸用戶的用戶信息。

HKEY_DYN_DATA保存了系統運行時的動態數據,它反映出系統的當前狀態,在每次運行時都是不同的,即使是在同一臺機器上。

根據上面的分析,註冊表中的信息能夠分爲HKEY_LOCAL_MACHINE和HKEY_USERS兩大類,這兩大類的詳細內容請看後面的介紹。

4、六大根鍵的做用

在註冊表中,全部的數據都是經過一種樹狀結構以鍵和子鍵的方式組織起來,十分相似於目錄結構。每一個鍵都包含了一組特定的信息,每一個鍵的鍵名都是 和它所包含的信息相關的。若是這個鍵包含子鍵,則在註冊表編輯器窗口中表明這個鍵的文件夾的左邊將有「+」符號,以表示在這個文件夾中有更多的內容。若是這個文件夾被用戶打開了,那麼這個「+」就會變成「-」。

1.HKEY_USERS

該根鍵保存了存放在本地計算機口令列表中的用戶標識和密碼列表。每一個用戶的預配置信息都存儲在HKEY_USERS根鍵中。HKEY_USERS是遠程計算機中訪問的根鍵之一。

2.HKEY_CURRENT_USER

該根鍵包含本地工做站中存放的當前登陸的用戶信息,包括用戶登陸用戶名和暫存的密碼(注:此密碼在輸入時是隱藏的)。用戶登陸Windows 98時,其信息從HKEY_USERS中相應的項拷貝到HKEY_CURRENT_USER中。

3.HKEY_CURRENT_CONFIG

該根鍵存放着定義當前用戶桌面配置(如顯示器等)的數據,最後使用的文檔列表(MRU)和其餘有關當前用戶的Windows 98中文版的安裝的信息。

4.HKEY_CLASSES_ROOT

根據在Windows 98中文版中安裝的應用程序的擴展名,該根鍵指明其文件類型的名稱。
在第一次安裝Windows 98中文版時,RTF(Rich Text format)文件與寫字板(WordPad)&127;聯繫起來,但在之後安裝了中文Word 6.0後,雙擊一個RTF文件時,將自動激活Word。存放在SYSTEM.DAT中的HKEY_CLASSES_ROOT,將替代WIN.INI文件中的設置項,它把應用程序與文件擴展名聯繫起來,它也替代了Windows 3.x中的Reg.dat文件中的類似的設置項。

5.HKEY_LOCAL_MACHINE

該根鍵存放本地計算機硬件數據,此根鍵下的子關鍵字包括在SYSTEM.DAT中,用來提供HKEY_LOCAL_MACHINE所需的信息,或者在遠程計算機中可訪問的一組鍵中。
該根鍵中的許多子鍵與System.ini文件中設置項相似。

6.HKEY_DYN_DATA

該根鍵存放了系統在運行時動態數據,此數據在每次顯示時都是變化的,所以,此根鍵下的信息沒有放在註冊表中。

5、註冊表經常使用Key

註冊表是一個大型數據庫Registry。要詳細地分析該數據庫,不是一兩頁就能介紹完。我曾經用了半年多時間分析此數據庫結構。下面只介紹部分重要內容。

HKEY_CLASS_ROOT

HKEY_CLASS_ROOT/Paint.Pricture/DefaultIcon雙擊窗口右側的默認字符串,在打開的對話框中刪除原來的「鍵值」,輸入%1。從新啓動後,在「個人電腦」中打開Windows目錄,選擇「大圖標」,而後你看到的Bmp文件的圖標不再是千篇一概的MSPAINT圖標了,而是每一個Bmp文件的略圖(前提是未安裝ACDSee等看圖軟件)。

HKEY_CURRENT_USER

1.HKEY_CURRENT_USER\Control Panel\Desktop 中新建串值名MenuShowDelay=0 可以使「開始」菜單中子菜單的彈出速度提升。

2.在HKEY_CURRENT_USER\Control Panel\Deskt-op\WindowsMeterics中新建串值名MinAnimate,值爲1啓動動畫效果開關窗口,值爲0取消動畫效果。

HKEY_LOCAL_MACHINE

1.HKEY_LOCAL_MACHINE\software\microsoft\windows\currentVersion\explorer\user shell folders 保存我的文件夾、收藏夾的路徑。
2.HKEY_LOCAL_MACHINE\system\currentControl-Set\control\keyboard Layouts 保存鍵盤使用的語言以及各類中文輸入法。
3.HKEY_LOCAL_MACHINE\software\microsoft\windows\currentVersion\uninstall 保存已安裝的Windows應用程序卸載信息。
4.HKEY_LOCAL_MACHINE\system\CurrentControl-Set\services\class 保存控制面板-增添硬件設備-設備類型目錄。
5.HKEY_LOCAL_MACHINE\system\Current-ControlSet\control\update 設置刷新方式。值爲00設置爲自動刷新,01設置爲手工刷新。
6.HKEY_LOCAL_MACHINE\software\microsoft\win-dows\currentVersion\run 保存由控制面板設定的計算機啓動時運行程序的名稱,其圖標顯示在任務條右邊。在「啓動」文件夾程序運行時圖標也在任務條右邊。
7.HKEY_LOCAL_MACHINE\software\microsoft\windows\currentVersion\Policies\Ratings 保存IE4.0中文版「安全」「分級審查」中設置的口令(數據加密),若遺忘了口令,刪除 Ratings 中的數據便可解決問題。
8.HKEY_LOCAL_MACHINE\software\microsoft\windows\currentVersion\explorer\desktop\nameSpace 保存桌面中特殊的圖標,如回收站、收件箱、MS Network等。

HKEY_USERS

1.HKEY_USERS.Default\software\microsoft\internet explorer\typeURLs保存IE4.0瀏覽器地址欄中輸入的URL地址列表信息。清除文檔菜單時將被清空。
2.HKEY_USERS.Default\so..\mi..\wi..\current-Version\ex..\menuOrder\startMenu保留程序菜單排序信息。
3.HKEY_USERS.Default\so..\microsoft\windows\current-Version\explorer\RunMRU保存「開始  運行...」中運行的程序列表信息。清除文檔菜單時將被清空。
4.HKEY_USERS.Default\so..\microsoft\windows\current-Version\explorer\RecentDocs 保存最近使用的十五個文檔的快捷方式(刪除掉可解決文檔名稱重複的毛病),清除文檔菜單時將被清空。
5.HKEY_USERS.default\software\microsoft\windows\currentVersion\applets 保存Windows應用程序的記錄數據。
6.HKEY_USERS.default\software\microsoft\windows\currentVersion\run保存由用戶設定的計算機啓動時運行程序的名稱,其圖標顯示在任務條右側。

6、註冊表術語

①、註冊表:是一個樹狀分層的數據庫。從物理上講,它是System.dat和User.dat兩個文件;從邏輯上講,它是用戶在註冊表編輯器中看到的配置數據。
②、HKEY :「根鍵」或「主鍵」,它的圖標與資源管理器中文件夾的圖標有點兒相像。Windows98將註冊表分爲六個部分,並稱之爲 HKEY_name,它意味着某一鍵的句柄。
③、key(鍵):它包含了附加的文件夾和一個或多個值。
④、subkey(子鍵):在某一個鍵(父鍵)下面出現的鍵(子鍵)。
⑤、branch(分支):表明一個特定的子鍵及其所包含的一切。一個分支能夠從每一個註冊表的頂端開始,但一般用以說明一個鍵和其全部內容。
⑥、value entry(值項):帶有一個名稱和一個值的有序值。每一個鍵均可包含任何數量的值項。每一個值項均由三部分組成:名稱,數據類型,數據。

  ★ 名稱:不包括反斜槓的字符、數字、表明符、空格的任意組合。同一鍵中不可有相同的名稱。

  ★ 數據類型:包括字符串、二進制、雙字三種。

  字符串(REG_SZ):顧名思義,一串ASCII碼字符。如「Hello World」,是一串文字或詞組。在註冊表中,字符串值通常用來表示文件的描述、硬件的標識等。一般它由字母和數字組成。註冊表老是在引號內顯示字符串。

  二進制(REG_BINARY):如 F03D990000BC ,是沒有長度限制的二進制數值,在註冊表編輯器中,二進制數據以十六進制的方式顯示出來。

  雙 字(REG_DWORD):從字面上理解應該是Double Word ,雙字節值。由1-8個十六進制數據組成,咱們可用以十六進制或十進制的方式來編輯。如 D1234567 。

  ★ 數據: 值項的具體值,它能夠佔用到64KB。

⑦、 Default(缺省值):每個鍵至少包括一個值項,稱爲缺省值(Default),它老是一個字串。

8、註冊表清理腳本

如下代碼主要是刪除臨時文件,舊文件。並不可以刪除無效的鍵

@echo off 
del/f/s/q %systemdrive%\*.tmp 
del/f/s/q %systemdrive%\*._mp 
del/f/s/q %systemdrive%\*.log 
del/f/s/q %systemdrive%\*.gid 
del/f/s/q %systemdrive%\*.chk 
del/f/s/q %systemdrive%\*.old 
del/f/s/q %windir%\*.bak 
del/f/q %systemdrive%\recycled\*.* 
del/f/q %windir%\prefetch\*.* 
rd/s/q %windir%\temp & md %windir%\tempemp% &md %temp% 
del/f/q %userprofile%\cookies\*.* 
del/f/q %userprofile%\recent\*.* 
rd/s/q \「%userprofile%\Local Settings\Temporary Internet Files\」 
cls & echo 系統垃圾清除完成:) 
echo. & pause

9、相似regedit的程序

regedit=regist(註冊)+edit(編輯)

  1. gpedit.msc-----組策略
  2. sndrec32-------錄音機
  3. Nslookup-------IP地址偵測器
  4. explorer-------打開資源管理器
  5. logoff---------註銷命令
  6. tsshutdn-------60秒倒計時關機命令
  7. lusrmgr.msc----本機用戶和組
  8. services.msc---本地服務設置
  9. oobe/msoobe /a----檢查XP是否激活
  10. notepad--------打開記事本
  11. cleanmgr-------垃圾整理
  12. net start messenger----開始信使服務
  13. compmgmt.msc---計算機管理
  14. net stop messenger-----中止信使服務
  15. conf-----------啓動netmeeting
  16. dvdplay--------DVD播放器
  17. charmap--------啓動字符映射表
  18. diskmgmt.msc---磁盤管理實用程序
  19. calc-----------啓動計算器
  20. dfrg.msc-------磁盤碎片整理程序
  21. chkdsk.exe-----Chkdsk磁盤檢查
  22. devmgmt.msc--- 設備管理器
  23. regsvr32 /u *.dll----中止dll文件運行
  24. drwtsn32------ 系統醫生
  25. rononce -p ----15秒關機
  26. dxdiag---------檢查DirectX信息
  27. regedt32-------註冊表編輯器
  28. Msconfig.exe---系統配置實用程序
  29. rsop.msc-------組策略結果集
  30. mem.exe--------顯示內存使用狀況
  31. regedit.exe----註冊表
  32. winchat--------XP自帶局域網聊天
  33. progman--------程序管理器
  34. winmsd---------系統信息
  35. perfmon.msc----計算機性能監測程序
  36. winver---------檢查Windows版本
  37. sfc /scannow-----掃描錯誤並復原
  38. taskmgr-----任務管理器(2000/xp/2003
  39. winver---------檢查Windows版本
  40. wmimgmt.msc----打開windows管理體系結構(WMI)
  41. wupdmgr--------windows更新程序
  42. wscript--------windows腳本宿主設置
  43. write----------寫字板
  44. winmsd---------系統信息
  45. wiaacmgr-------掃描儀和照相機嚮導
  46. winchat--------XP自帶局域網聊天
  47. mem.exe--------顯示內存使用狀況
  48. Msconfig.exe---系統配置實用程序
  49. mplayer2-------簡易widnows media player
  50. mspaint--------畫圖板
  51. mstsc----------遠程桌面鏈接
  52. mplayer2-------媒體播放機
  53. magnify--------放大鏡實用程序
  54. mmc------------打開控制檯
  55. mobsync--------同步命令
  56. dxdiag---------檢查DirectX信息
  57. drwtsn32------ 系統醫生
  58. devmgmt.msc--- 設備管理器
  59. dfrg.msc-------磁盤碎片整理程序
  60. diskmgmt.msc---磁盤管理實用程序
  61. dcomcnfg-------打開系統組件服務
  62. ddeshare-------打開DDE共享設置
  63. dvdplay--------DVD播放器
  64. net stop messenger-----中止信使服務
  65. net start messenger----開始信使服務
  66. notepad--------打開記事本
  67. nslookup-------網絡管理的工具嚮導
  68. ntbackup-------系統備份和還原
  69. narrator-------屏幕"講述人"
  70. ntmsmgr.msc----移動存儲管理器
  71. ntmsoprq.msc---移動存儲管理員操做請求
  72. netstat -an----(TC)命令檢查接口
  73. syncapp--------建立一個公文包
  74. sysedit--------系統配置編輯器
  75. sigverif-------文件簽名驗證程序
  76. sndrec32-------錄音機
  77. shrpubw--------建立共享文件夾
  78. secpol.msc-----本地安全策略
  79. syskey---------系統加密,一旦加密就不能解開,保護windows xp系統的雙重密碼
  80. services.msc---本地服務設置
  81. Sndvol32-------音量控制程序
  82. sfc.exe--------系統文件檢查器
  83. sfc /scannow---windows文件保護
  84. tsshutdn-------60秒倒計時關機命令
  85. tourstart------xp簡介(安裝完成後出現的漫遊xp程序)
  86. taskmgr--------任務管理器
  87. eventvwr-------事件查看器
  88. eudcedit-------造字程序
  89. explorer-------打開資源管理器
  90. packager-------對象包裝程序
  91. perfmon.msc----計算機性能監測程序
  92. progman--------程序管理器
  93. regedit.exe----註冊表
  94. rsop.msc-------組策略結果集
  95. regedt32-------註冊表編輯器
  96. rononce -p ----15秒關機
  97. regsvr32 /u *.dll----中止dll文件運行
  98. regsvr32 /u zipfldr.dll------取消ZIP支持
  99. cmd.exe--------CMD命令提示符
  100. chkdsk.exe-----Chkdsk磁盤檢查
  101. certmgr.msc----證書管理實用程序
  102. calc-----------啓動計算器
  103. charmap--------啓動字符映射表
  104. cliconfg-------SQL SERVER 客戶端網絡實用程序
  105. Clipbrd--------剪貼板查看器
  106. conf-----------啓動netmeeting
  107. compmgmt.msc---計算機管理
  108. cleanmgr-------垃圾整理
  109. ciadv.msc------索引服務程序
  110. osk------------打開屏幕鍵盤
  111. odbcad32-------ODBC數據源管理器
  112. oobe/msoobe /a----檢查XP是否激活
  113. lusrmgr.msc----本機用戶和組
  114. logoff---------註銷命令
  115. iexpress-------木馬捆綁工具,系統自帶
  116. Nslookup-------IP地址偵測器
  117. fsmgmt.msc-----共享文件夾管理器
  118. utilman--------輔助工具管理器
  119. gpedit.msc-----組策略

10、更改註冊表的例子

文件夾上下文菜單修改

修改HKEY_CLASSES_ROOT項的Directory項,background表示在文件夾中點擊鼠標右鍵出現的上下文菜單;shell表示選中文件夾以後鼠標右鍵出現的上下文菜單;shellex表示按住shift時能夠看見的上下文菜單,好比「複製文件路徑」命令就必須在按住shift的時候點擊鼠標右鍵才能顯示出來。
這個shell/command,其實就是寫一個腳本,文件夾的徹底路徑名稱爲第一個參數: %1。也能夠模仿cmd命令寫成%V。

右鍵文件夾時顯示覆制到剪貼板

文件夾路徑複製到剪貼板

一種方式是直接打開regedit修改,另外一種方式是把鍵值對寫成以下形式,保存爲haha.reg文件,雙擊運行便可。

[HKEY_CLASSES_ROOT\Directory\shell\copypath]  
@="複製文件夾路徑"  
[HKEY_CLASSES_ROOT\Directory\shell\copypath\command]  
@="mshta vbscript:clipboarddata.setdata(\"text\",\"%1\")(close)"

將sublime添加到上下文菜單中

將sublime命令加入到上下文菜單中去。步驟以下:
一、新建HKEY_CLASSES_ROOT\Directory\shell\sublime項,能夠給這一項指定註冊表名稱(sublime)、顯示名稱(在sublime打開)、圖標(顯示的圖標)
二、在sublime項下新建一項command表示點擊這一項以後發生的事件。%1表示命令的第一個參數,%*表示命令所有參數。有時候用%1無論用,能夠試試%V。

添加「新建」到上下文菜單

運行殺毒軟件時,可能把上下文菜單中的「新建」去掉。能夠經過添加HKEY_CLASSES_ROOT\Directory\ShareEx\ContextMenuHandlers\new={D969A300-E7FF-11d0-A93B-00A0C90F2719}來找回。

11、使用C#操做註冊表

下面咱們就來用.NET下託管語言C#註冊表操做,主要內容包括:

  • 註冊表項的建立,打開與刪除
  • 鍵值的建立(設置值、修改),讀取和刪除
  • 判斷註冊表項是否存在、判斷鍵值是否存在。

和註冊表相關的命名空間using Microsoft.Win32;,在這個命名空間裏面包含了許多註冊表相關的類。命名空間裏面提供了一個類RegistryKey 利用它咱們能夠定位到註冊表最開頭的分支:ClassesRoot,CurrentUser,Users,LocalMachine,CurrentConfig,如:RegistryKey key = Registry.LocalMachine;。在操做的過程當中涉及到子分支,要用\\進行深刻。最後要調用RegistryKey對象的Close()關閉註冊表。

如下咱們的例子都是在LocalMachine分支下,請注意。

註冊表項的建立,打開與刪除

1:建立
建立註冊表項主要用到RegistryKey 的CreateSubKey()方法。如:

RegistryKey key = Registry.LocalMachine;
RegistryKey software = key.CreateSubKey("software\\test");
//在HKEY_LOCAL_MACHINE\SOFTWARE下新建名爲test的註冊表項。若是已經存在則不影響!

2:打開
打開註冊表項主要用到RegistryKey 的OpenSubKey()方法。如:
注意,若是該註冊表項不存在,這調用這個方法會拋出異常

RegistryKey key = Registry.LocalMachine;
RegistryKey software = key.OpenSubKey("software\\test",true);
//注意該方法後面還能夠有一個布爾型的參數,true表示能夠寫入。

3:刪除
刪除註冊表項主要用到RegistryKey 的DeleteSubKey()方法。如:

RegistryKey key = Registry.LocalMachine;
key.DeleteSubKey("software\\test",true); //該方法無返回值,直接調用便可
key.Close();

注意,若是該註冊表項不存在,這調用這個方法會拋出異常

鍵值的建立、讀取和刪除

1:建立(設置值、修改)
對鍵值的建立修改等操做主要用到RegistryKey 的SetValue()方法

RegistryKey key = Registry.LocalMachine;
RegistryKey software = key.OpenSubKey("software\\test",true); //該項必須已存在
software.SetValue("test", "博客園");
//在HKEY_LOCAL_MACHINE\SOFTWARE\test下建立一個名爲「test」,值爲「博客園」的鍵值。若是該鍵值本來已經存在,則會修改替換原來的鍵值,若是不存在則是建立該鍵值。
// 注意:SetValue()還有第三個參數,主要是用於設置鍵值的類型,如:字符串,二進制,Dword等等~~默認是字符串。如:
// software.SetValue("test", "0", RegistryValueKind.DWord); //二進制信息
Key.Close();

2:讀取

string info = "";
RegistryKey Key;
Key = Registry.LocalMachine;
myreg = Key.OpenSubKey("software\\test");
// myreg = Key.OpenSubKey("software\\test",true);
info = myreg.GetValue("test").ToString();
myreg.Close();
info結果爲:博客園

3:刪除

RegistryKey delKey = Registry.LocalMachine.OpenSubKey("Software\\test", true);
delKey.DeleteValue("test");
delKey.Close();

細心的讀者可能發現了第二個例子中OpenSubKey()方法參數與其餘例子的不一樣。
若是你要修改鍵值,包括建立、設置、刪除鍵值等都要在方法後面加個布爾參數,設置爲true,表示可寫可改;若是僅僅只是讀取鍵值能夠不加,此時可寫關閉,你不能再往裏寫值(固然,你要加也能夠true)!
還有讀者提到讀寫默認鍵值的問題,主要在設置、讀取的方法中將鍵名置空則就是對默認鍵值的操做。
如:

software.SetValue("", "博客園"); // 在HKEY_LOCAL_MACHINE\SOFTWARE\test修改默認鍵值的值爲「博客園」。讀取相似!

另外,默認的鍵值是不能刪除的,因此不要用DeleteValue()方法去刪除,會拋出異常的!

判斷註冊表項是否存在

private bool IsRegeditItemExist()  
{  
    string [] subkeyNames;  
    RegistryKey hkml = Registry.LocalMachine;  
    RegistryKey software = hkml.OpenSubKey("SOFTWARE");  
    //RegistryKey software = hkml.OpenSubKey("SOFTWARE", true);  
    subkeyNames = software.GetSubKeyNames();  
    //取得該項下全部子項的名稱的序列,並傳遞給預約的數組中  
    foreach (string keyName in subkeyNames)   
    //遍歷整個數組  
    {  
        if (keyName == "test")  
        //判斷子項的名稱  
        {   
            hkml.Close();  
            return true ;  
        }  
    }  
    hkml.Close();  
    return false;   
}

判斷鍵值是否存在

private bool IsRegeditKeyExit()
{
  string[] subkeyNames;
  RegistryKey hkml = Registry.LocalMachine;
  RegistryKey software = hkml.OpenSubKey("SOFTWARE\\test");
  //RegistryKey software = hkml.OpenSubKey("SOFTWARE\\test", true);
  subkeyNames = software.GetValueNames();
  //取得該項下全部鍵值的名稱的序列,並傳遞給預約的數組中
  foreach (string keyName  in subkeyNames)
  {
    if (keyName ==  "test") //判斷鍵值的名稱
    {
        hkml.Close();
        return true;
    }    
    
  }
  hkml.Close();
  return false;
}

參考資料

http://www.cnblogs.com/txw1958/archive/2012/08/01/csharp-regidit.html http://www.jb51.net/article/3328.htm

相關文章
相關標籤/搜索