官术网_书友最值得收藏!

2.2 內置注冊表函數

注冊表是Windows系統中的一個系統數據庫,主要存儲硬件配置、軟件設置等信息。注冊表的操作主要有創建注冊表項、刪除注冊表項、修改注冊表項、讀取注冊表項等。

在實際編程過程中,可以把開發的程序中的一些變量的值存儲在注冊表中,也可以從注冊表中讀取內容,讓程序加以利用。因此注冊表操作很有必要學習和研究。

VBA操作注冊表的方式有多種,本節介紹VBA、VB6的幾個內置函數。

 GetSetting:根據指定的路徑獲取注冊表項的值。

 GetSettings:與GetSetting類似,返回一個數組。

 SaveSetting:保存內容到注冊表中。

 DeleteSetting:刪除一個注冊表項。

需要注意的是,上述4個內置函數的操作范圍只限于HKEY_CURRENT_USER\Software\VB and VBA Program Setting這個鍵值內部。

按下快捷鍵【Windows +R】,輸入regedit,按回車鍵即可彈出注冊表編輯器。然后依次單擊節點HKEY_CURRENT_USER\Software\VB and VBA Program Setting,就可以進入該文件夾中,如圖2-19所示。

圖2-19 VB、VBA專用的注冊表項

以上四個內置函數的參數幾乎都包含AppName、Section、Key三個層級。

以圖中所選的節點為例,AppName、Section、Key依次是CnChessQipu、DataBase、FileName。

2.2.1 GetSetting

GetSetting的作用是從指定的層級獲取Key的屬性值,返回一個字符串。

運行上述過程,對話框中返回注冊表中FileName的屬性值,如圖2-20所示。

與注冊表中對比,完全一致,如圖2-21所示。

圖2-20 獲取注冊表信息

圖2-21 核對獲取的結果

需要注意的是,如果GetSetting函數的三個參數中的任何一個寫錯,都將造成找不到注冊表項,不會出現運行錯誤,而是返回一個空字符串。

2.2.2 SaveSetting

在使用SaveSetting函數的過程中,如果指定的層級存在,就修改現有層級的屬性值;如果層級不存在,則會自動創建層級路徑。

SaveSetting是對注冊表的修改,沒有返回值,因此后面的參數不需要括號。

運行下面的過程,修改FileName這個Key的屬性值。

刷新一下注冊表,看到屬性值已修改,如圖2-22所示。

圖2-22 修改注冊表信息

在編程開發過程中,經常需要在一個Section下面建立多個Key,此時會對應多個屬性值。下面以世界各國信息為例,說明一下注冊表項的存取過程,如表2-3所示。

表2-3 世界各國基本信息表

假設要把表2-3中的內容保存到注冊表中,那么“國家”這一列就相當于Section,而首都、國土面積和人口都是Key,要分別保存。以上所有項目都位于“世界大國”這個AppName下面。

運行上述過程,刷新注冊表,可以看到注冊表中已存在相關信息,如圖2-23所示。

圖2-23 批量存入注冊表

2.2.3 DeleteSetting

DeleteSetting用于刪除一個注冊表節點,這里的節點可以是AppName、Section、Key中的任何一個。

DeleteSetting需要指定的參數也是三個,但是根據需要,可以更改參數個數。規定的參數越少,刪除的層級越高,刪除的內容也越多。

    DeleteSetting "世界大國", "加拿大",  "國土面積"

表示刪除加拿大的國土面積這個Key和屬性。

    DeleteSetting "世界大國", "加拿大"

表示刪除加拿大這個Section,也就是刪除加拿大這個文件夾。

    DeleteSetting "世界大國"

將會刪除整個AppName根節點。

2.2.4 GetAllSettings

獲取注冊表的方法,除了前面講過的GetSetting函數以外,還可以用GetAllSettings函數一次性獲取一個Section下面的所有Key及其屬性值。獲取到的內容是一個多行2列的二維數組。

下面的代碼把“中國”這個Section的所有屬性裝載到字符串數組v()中。

單步執行上述過程,可以在本地窗口看到v()是一個3行2列的二維數組,如圖2-24所示。

圖2-24 一次性獲取全部注冊表信息

為了把數組放到Excel單元格中,采用Range的Resize方法根據數組大小自動擴展區域。運行上述過程后,表格單元格的結果如圖2-25所示。

以上內容的源代碼文件為“實例文檔07.xlsm”。

以上四個注冊表操作函數一般用于產品開發時存取程序信息,如果要操作其他場所的注冊表項,需要用到2.3節講述的WshShell對象。

圖2-25 將注冊表信息發送到單元格

主站蜘蛛池模板: 清流县| 洛隆县| 台前县| 修武县| 枞阳县| 东乌| 项城市| 洛川县| 慈利县| 绥化市| 岗巴县| 贵港市| 承德县| 临沂市| 天祝| 禹州市| 区。| 大余县| 济源市| 玉龙| 平原县| 永宁县| 宁海县| 乃东县| 高平市| 鸡东县| 兰西县| 乐安县| 来宾市| 富平县| 军事| 泾阳县| 英吉沙县| 司法| 北川| 建昌县| 卢湾区| 正定县| 达尔| 清涧县| 横山县|