|
虽然VB本身提供了四个关于注册表的函数,但是这四个函数只能在标准位置即“HKEY_CURRENT_USER\Software\VB and VBA ProgramSettings”下读取、删除、修改键值。对于一般的应用程序,利用它们就可以达到您的目的,对于特殊的要求利用它们就显得无能为力了。在 Visual Basic 中除了使用这四个内部语句或函数外,还可以调用 Windows API 函数来操作注册表。
所谓 API(Application Programing Interface) 是 Windows 提供的一个32位环境下的应用程序编程接口,其中包括了众多的函数,提供了相当丰富的功能。我们在编制应用程序时,可以调用其中的注册表函数来对注册表进行操作以实现我们需要的功能。Windows API 中可用于注册表的函数一共有二十多个,根据其功能不同可以分为如下几类:
1.键管理类
RegCloseKey() RegCreateKey() RegCreateKeyEx() RegDeleteKey() RegDeleteKeyEx() RegOpenKey() RegOpenKeyEx()
2.值管理类
RegDeletevalue() RegQueryvalue() RegQueryvalueEx() RegSetvalue() RegSetvalueEx()
3.查询计数类
RegQueryInfoKey() RegEnumKey() RegEnumKeyEx() RegEnumvalue()
4.备份/恢复类
RegLoadKey() RegReplaceKey() RegRestoreKey() RegSaveKey()
5.实用类
RegConnectRegistry() RegNotifyChangeKeyvalue() RegUnloadKey()
6.安全类(仅适用于NT)
RegGetKeySecurity() RegSetKeySecurity()
下面详细介绍这几个Windows API 函数的用法:
1. RegOpenKey——取得SubKey的Hkey
RegOpenKeyEx():同RegOpenKey()
VB声明 Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
参数类型及说明:
hKey:Key Handle
lpSubKey:SubKey名称或路径
phkResult:若RegOpenKey执行成功,则这一参数返回Subkey的hKey.
返回值: =0,表示成功;≠0,表示失败。[注意这一点与别的API函数不太一样]
示例:
ret = RegOpenKey(HKEY_LOCAL_MACHINE,
"SOFTWARE\Microsoft", hKey)
2.RegCreateKeyEx、RegCreateKey函数:建立SubKey
VB声明 Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
它的参数用法与RegOpenKey一样。所不同的是RegOpenKey只能打开已经有的SubKey,而RegCreateKey则可以建立SubKey,比较特别的是,如果调用RegCreateKey所建立的SubKey是一个已经存在的SubKey,则它的功能和RegOpenKey相同。由于RegCreateKey的这种特性,有的程序员干脆不用RegOpenKey,而用RegCreateKey来统一代替RegOpenKey。
示例:
ret = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Hongqt", hKey)
3.RegClose函数:关闭SubKey
Declare Function RegCloseKey Lib "advapi32.dll"
(ByVal hKey As Long) As Long
当我们不再存取Registry时,将打开或建立的SubKey关闭是一个比较好的习惯,就正如我们在使用C语言的文件打开函数后必须要关闭一样。
示例:
ret = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft", hKey)
……
RegClose hkey
4.RegQueryvalue——读取某Key的默认值(default value)
VB声明
Declare Function RegQueryvalue Lib "advapi32.dll" Alias "RegQueryvalueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpvalue As String, lpcbvalue As Long) As Long
hKey: Key Handle
lpSubKey:SubKey名称路径
lpvalue:返回读取的Default value
lpcbvalue:传入lpvalue参数的长度,若成功读取了默认值default value,则返回default value字符串的长度(含chr(0))这个和C语言中字符串的处理相似,都是以chr(0)作为结束符。
返回值: =0,表示成功;≠0,表示失败。
示例:
ret = RegQueryvalue(hKey, Subkey, "", lenS)
5.RegSetvalue——删除某Key的默认值(default value)
VB声明
Declare Function RegSetvalue Lib "advapi32.dll" Alias "RegSetvalueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
hKey:Key Handle
lpSubKey:Subkey名称或路径
dwType:数据类型,但在这里只能接受REG_SZ[字符串类型]
lpData:所设置的字符串
cbData:lpData字符串的长度,这一长度包括chr(0)字符。
关于dwType的可能取值
Enum valueType
REG_NONE = 0
REG_SZ = 1
REG_EXPA |
|