程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB的API編程精粹(一)

VB的API編程精粹(一)

編輯:VB綜合教程

一. 注冊表的API編程

關於注冊表的知識相信您通過前面專題的介紹已經有了較深入的了解。系統有六個預定義好的關鍵字,這六個關鍵字是用戶或系統訪問注冊表的入口點。我們常用到的只有前四個關鍵字。而在編程時我們一般用到只是HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE這兩個關鍵字,因為與應用程序相關的數據存在於這兩個關鍵字下。

許多商品化的軟件或專業化的軟件在您的機器上首次安裝的時候都會通過改寫注冊表來完成軟件的正確安裝運行,夢想成為編程高手的你當然需要掌握讀寫注冊表這一技術。利用好注冊表會為您的應用程序增色不少。

雖然VB本身提供了四個關於注冊表的函數GetSetting,SaveSetting、GetAllSettings、DeleteSetting(這四個函數的使用比較簡單讀者可以參考VB的聯機幫助),但是這四個函數只能在“HKEY_CURRENT_USERSoftwareVB and VBA ProgramSettings”下讀取、刪除、修改鍵值。對於一般的應用程序利用它們可以達到您的目的,對於特殊的要求利用它們就顯的無能為力了。下面舉一個例子說明它們的局限性。

熟悉DOS操作系統的讀者都知道,可以編寫一個“Autoexec.bat”的批處理文件來實現某一個應用程序在系統啟動的時候自動運行,在Win95中我們可以把應用程序的快捷方式放到系統的啟動組中來達到同樣的效果。但是,假如我需要在我的應用程序首次安裝以後就能自動達到這種效果,那該如何呢?其實,注冊表中提供了三個這樣的鍵:

HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunOnce
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServices

這三個鍵字的區別是:

Run:此鍵字下的應用程序在系統啟動的時候會自動運行;

RunOnce:此鍵字下的應用程序在系統下一次啟動的時候會自動運行,以後不再運行;

RunServices:功能和“Run”一樣,只是應用程序被啟動的時候不同而已。

現在您一定知道該如何利用注冊表達到您的要求了。實際上許多安裝軟件在安裝向導完成後要您重新啟動才能完成最終的安裝。它就是把安裝向導所需做的最後工作的程序寫到“RunOnce”下實現的。但是,若只利用VB本身的那四個函數顯然是無法實現此功能的。筆者在實踐中通過調用API函數很好地解決了VB本身訪問注冊表的局限性,並把它做成了一個類模塊。所以調用起來非常方便。由於篇幅有限我只能從中抽取一部分來講,這一部分也是可以獨立運行的。讀者想要完整的源代碼請與我聯系([email protected])。

下面是應該放到您的模塊中的聲明部分代碼:
Option Explicit
'注冊表的入口常量
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
'注冊表的訪問權限常量
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_SET_VALUE = &H2
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_NOTIFY = &H10
Public Const KEY_CREATE_LINk = &H20
Public Const KEY_ALL_ACCESS = &H3F
'打開/建立鍵值的可選項常量
Public Const REG_OPTION_NON_VOLATILE = 0&
Public Const REG_OPTION_VOLATILE = &H1
'建立新鍵或打開已存在的鍵常量
Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_OPENED_EXISTING_KEY = &H2
'預先定義的訪問注冊表的權限常量
Public Const STANDARD_RIGHTS_ALL = &H1F0000
Public Const SPECIFIC_RIGHTS_ALL = &HFFFF
'API的返回代碼常量
Public Const ERROR_SUCCESS = 0&
Public Const ERROR_ACCESS_DENIED = 5
Public Const ERROR_NO_MORE_ITEMS = 259
'返回數值類型常量
Public Const REG_NONE = (0)
Public Const REG_SZ = (1)
Public Const REG_EXPAND_SZ = (2)
Public Const REG_BINARY = (3)
Public Const REG_DWORD = (4)
PubliC ConSt REG_DWORD_LITTLE_ENDIAN = (4)
Public Const REG_DWORD_BIG_ENDIAN = (5)
Public Const REG_LINK = (6)
Public Const REG_MULTI_SZ = (7)
Public Const REG_RESOURCE_LIST = (8)
Public Const REG_FULL_RESOURCE_DESCRIPTOR = (9)
Public Const REG_RESOURCE_REQUIREMENTS_LIST = (10)
'訪問注冊表的API函數要用到的結構類型
Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean
End Type
Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
'要用到的API函數聲明
…………
(鑒於篇幅這裡只介紹一下各API的作用而不再一一列其聲明;相關聲明請讀者查閱API浏覽器)

下面簡單地介紹一下這幾個API:

RegOpenKeyEx():打開指定的關鍵字(32位);
RegSetValueEx():在打開的注冊表關鍵字的值域中存儲數據;
RegCloseKey():釋放指定的關鍵字的句柄;
RegQueryValueEx():在注冊表中查找與您指定的鍵值相關的值;
RegCreateKeyEx():建立並打開指定的關鍵字,若已存在則打開它;
RegEnumKeyEx():枚舉指定的打開注冊表關鍵字的子關鍵字(32位);
RegEnumKey():同上功能一樣,區別在於它是16位的;
RegEnumValue():每次調用枚舉指定的打開注冊表關鍵字的值復制一個帶索引的值的名稱和數據塊;
RegDeletekey():刪除一個關鍵字以及它的子關鍵字;
RegDeleteValue():在指定的注冊表關鍵字中刪除一個帶名字的值。

通過調用這些API我們可以輕松實現注冊表的任意關鍵字的讀取、查詢、建立、刪除。筆者在這裡只打算介紹一下如何建立和刪除一個特定的關鍵字。其它操作讀者可以自己去發揮。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved