|
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中运行通过。 ->
|