Windows系统中的注册表(Resgister)保存着大量的信息,我们可读写注册表来更好地为我们软件服务。
下面详细讲叙如何通过调用API函数操作注册表:如何打开、创建主键,如何保存键值,以及查询某键的键值等。
一、常数定义和API申明(我们会在使用该API时对它进行说明): PrivateConstHKEY_CLASSES_ROOT=&H80000000主键
PrivateConstHKEY_CURRENT_USER=&H80000001主键
PrivateConstSTANDARD_RIGHTS_ALL=&H1F0000
PrivateConstKEY_ENUMERATE_SUB_KEYS=&H8
PrivateConstKEY_SET_VALUE=&H2
PrivateConstKEY_CREATE_SUB_KEY=&H4
PrivateConstKEY_QUERY_VALUE=&H1
PrivateConstKEY_NOTIFY=&H10
PrivateConstKEY_CREATE_LINK=&H20
PrivateConstSYNCHRONIZE=&H100000
PrivateConstKEY_ALL_ACCESS=((STANDARD_RIGHTS_ALLOrKEY_QUERY_VALUEOrKEY_SET_VALUEOrKEY_CREATE_SUB_KEYOrKEY_ENUMERATE_SUB_KEYSOrKEY_NOTIFYOrKEY_CREATE_LINK)And(NotSYNCHRONIZE))
PrivateConstREG_MULTI_SZ=7
PrivateConstERROR_SUCCESS=0&
PrivateConstREAD_CONTROL=&H20000
PrivateConstREG_SZ=1
PrivateConstREG_DWORD=4
PrivateConstREG_EXPAND_SZ=2
PrivateConstREG_BINARY=3
PrivateConstREG_DWORD_BIG_ENDIAN=5
PrivateConstREG_DWORD_LITTLE_ENDIAN=4
PrivateConstREG_NONE=0
PrivateDeclareFunctionRegOpenKeyExLib“advapi32.dll"Alias“RegOpenKeyExA"(ByValhKeyAsLong,ByVallpSubKeyAsString,ByValulOptionsAsLong,ByValsamDesiredAsLong,phkResultAsLong)AsLong
PrivateDeclareFunctionRegCreateKeyLib“advapi32.dll"Alias“RegCreateKeyA"(ByValhKeyAsLong,ByVallpSubKeyAsString,phkResultAsLong)AsLong
PrivateDeclareFunctionRegSetValueExLib“advapi32.dll"Alias“RegSetValueExA"(ByValhKeyAsLong,ByVallpValueNameAsString,ByValReservedAsLong,ByValdwTypeAsLong,lpDataAsAny,ByValcbDataAsLong)AsLong
PrivateDeclareFunctionRegQueryValueExLib"advapi32.dll"Alias"RegQueryValueExA"(ByValhKeyAsLong,ByVallpValueNameAsString,ByVallpReservedAsLong,lpTypeAsLong,lpDataAs
Any,lpcbDataAsLong)AsLongPrivateDeclareFunctionRegCloseKeyLib"advapi32.dll"(ByValhKeyAsLong)AsLong
二、将下列代码放在窗体的Load事件中
PrivateSubForm_Load()
DimhKeyAsLong主键的句柄
DimlpDataAsString查询得到的键值
DimSizeOfDataAsLong键值的长度
DimValueTypeAsLong键值的类型
SizeOfData=150
Dimreturn_OpenKeyAsLong函数调用的返回值
DimPriKeyAsString主键
DimKeyValue1,KeyValue2AsString键值名称
PriKey="北信BITI\People"主键
KeyValue1="教授"键值名称
KeyValue2="学生"键值名称
下面的函数RegOpenKeyEx取得一个句柄hKey
return_OpenKey=RegOpenKeyEx(HKEY_CURRENT_USER,"",0,KEY_ALL_ACCESS,hKey)
下面的函数RegCreateKey建立一个主键,如此键已存在,则打开它IfRegCreateKey(hKey,PriKey,hKey)<>ERROR_SUCCESSThen
MsgBox"create"&PriKey&"Failed"
ExitSub
EndIf
DimKeyDataAsString键值
KeyData="500"
下面的函数RegSetValueEx给指定的键值名称赋键值
IfRegSetValueEx(hKey,KeyValue1,0&,REG_SZ,ByValKeyData,Len(KeyData)+1)<>ERROR_SUCCESSThen
MsgBox"SetValue"&KeyValue1&"Failed"
ExitSub
EndIf
KeyData="15020"
下面的函数RegSetValueEx给指定的键值名称"学生"赋键值为"15020"
IfRegSetValueEx(hKey,KeyValue2,0&,REG_SZ,ByValKeyData,Len(KeyData)+1)<>ERROR_SUCCESSThen
MsgBox"SetValue"&KeyValue2&"Failed"
ExitSub
EndIf
return_OpenKey=RegQueryValueEx(hKey,KeyValue1,0&,REG_SZ,0&,SizeOfData)
lpData=String(SizeOfData+1,"")
下面的函数RegQueryValueEx检索指定键值名称的键值和键值类型
IfRegQueryValueEx(hKey,KeyValue1,0&,REG_SZ,ByVallpData,SizeOfData)<>ERROR_SUCCESSThen
MsgBox"Query"&KeyValue1&"Failed"
EndIf
RegCloseKey(hKey)释放主键的句柄
EndSub
运行此程序后,打开注册表,我们会发现在主键HKEY_CURRENT_USER(在此主键下记录本机当前用户的一些信息)下,增加了子键"北信BITI\People",我们还可看到两个指定的键值名称都有正确的键值。从而完成了注册的任务。
注:此程序在VB5.0中运行通过。
->