一个操作注册表的类.docx
《一个操作注册表的类.docx》由会员分享,可在线阅读,更多相关《一个操作注册表的类.docx(8页珍藏版)》请在冰点文库上搜索。
一个操作注册表的类
一个操作注册表的类
'因发现询问注册表操作的网友比较多,特整理了一套注册表操作的函数,以下代码直接Copy即可运行。
OptionExplicit
'注册表主键
PublicEnumenumRegMainKey
iHKEY_CURRENT_USER=&H80000001
iHKEY_LOCAL_MACHINE=&H80000002
iHKEY_CLASSES_ROOT=&H80000000
iHKEY_CURRENT_CONFIG=&H80000005
iHKEY_USERS=&H80000003
EndEnum
'注册表数据类型
PublicEnumenumRegSzType
iREG_SZ=&H1
iREG_EXPAND_SZ=&H2
iREG_BINARY=&H3
iREG_DWORD=&H4
iREG_NONE=0&
iREG_DWORD_LITTLE_ENDIAN=4&
iREG_DWORD_BIG_ENDIAN=5&
iREG_LINK=6&
iREG_MULTI_SZ=7&
iREG_RESOURCE_LIST=8&
iREG_FULL_RESOURCE_DESCRIPTOR=9&
iREG_RESOURCE_REQUIREMENTS_LIST=10&
EndEnum
'注册表
PrivateConstERROR_SUCCESS=0&
PrivateConstERROR_BADDB=1009&
PrivateConstERROR_BADKEY=1010&
PrivateConstERROR_CANTOPEN=1011&
PrivateConstERROR_CANTREAD=1012&
PrivateConstERROR_CANTWRITE=1013&
PrivateConstERROR_OUTOFMEMORY=14&
PrivateConstERROR_INVALID_PARAMETER=87&
PrivateConstERROR_ACCESS_DENIED=5&
PrivateConstERROR_NO_MORE_ITEMS=259&
PrivateConstERROR_MORE_DATA=234&
PrivateConstKEY_QUERY_VALUE=&H1&
PrivateConstKEY_SET_VALUE=&H2&
PrivateConstKEY_CREATE_SUB_KEY=&H4&
PrivateConstKEY_ENUMERATE_SUB_KEYS=&H8&
PrivateConstKEY_NOTIFY=&H10&
PrivateConstKEY_CREATE_LINK=&H20&
PrivateConstSYNCHRONIZE=&H100000
PrivateConstREAD_CONTROL=&H20000
PrivateConstWRITE_DAC=&H40000
PrivateConstWRITE_OWNER=&H80000
PrivateConstSTANDARD_RIGHTS_REQUIRED=&HF0000
PrivateConstSTANDARD_RIGHTS_READ=READ_CONTROL
PrivateConstSTANDARD_RIGHTS_WRITE=READ_CONTROL
PrivateConstSTANDARD_RIGHTS_EXECUTE=READ_CONTROL
PrivateConstKEY_READ=STANDARD_RIGHTS_READOrKEY_QUERY_VALUEOrKEY_ENUMERATE_SUB_KEYSOrKEY_NOTIFY
PrivateConstKEY_WRITE=STANDARD_RIGHTS_WRITEOrKEY_SET_VALUEOrKEY_CREATE_SUB_KEY
PrivateConstKEY_EXECUTE=KEY_READ
PrivateDeclareFunctionRegCreateKeyLib"advapi32.dll"Alias"RegCreateKeyA"(ByValhKeyAsLong,ByVallpSubKeyAsString,phkResultAsLong)AsLong
PrivateDeclareFunctionRegCreateKeyExLib"advapi32.dll"Alias"RegCreateKeyExA"(ByValhKeyAsLong,ByVallpSubKeyAsString,ByValReservedAsLong,ByVallpClassAsString,ByValdwOptionsAsLong,ByValsamDesiredAsLong,lpSecurityAttributesAsSECURITY_ATTRIBUTES,phkResultAsLong,lpdwDispositionAsLong)AsLong
PrivateDeclareFunctionRegEnumValueLib"advapi32.dll"Alias"RegEnumValueA"(ByValhKeyAsLong,ByValdwIndexAsLong,ByVallpValueNameAsString,lpcbValueNameAsLong,ByVallpReservedAsLong,lpTypeAsLong,lpDataAsByte,lpcbDataAsLong)AsLong
PrivateDeclareFunctionRegEnumKeyExLib"advapi32.dll"Alias"RegEnumKeyExA"(ByValhKeyAsLong,ByValdwIndexAsLong,ByVallpNameAsString,lpcbNameAsLong,ByVallpReservedAsLong,ByVallpClassAsString,lpcbClassAsLong,lpftLastWriteTimeAsFILETIME)AsLong
PrivateDeclareFunctionRegOpenKeyExLib"advapi32.dll"Alias"RegOpenKeyExA"(ByValhKeyAsLong,ByVallpSubKeyAsString,ByValulOptionsAsLong,ByValsamDesiredAsLong,phkResultAsLong)AsLong
PrivateDeclareFunctionRegCloseKeyLib"advapi32.dll"(ByValhKeyAsLong)AsLong
PrivateDeclareFunctionRegDeleteValueLib"advapi32.dll"Alias"RegDeleteValueA"(ByValhKeyAsLong,ByVallpValueNameAsString)AsLong
PrivateDeclareFunctionRegSetValueExLib"advapi32.dll"Alias"RegSetValueExA"(ByValhKeyAsLong,ByVallpValueNameAsString,ByValReservedAsLong,ByValdwTypeAsLong,ByVallpDataAsString,ByValcbDataAsLong)AsLong
PrivateDeclareFunctionRegSetValueExLongLib"advapi32.dll"Alias"RegSetValueExA"(ByValhKeyAsLong,ByVallpValueNameAsString,ByValReservedAsLong,ByValdwTypeAsLong,lpDataAsLong,ByValcbDataAsLong)AsLong
PrivateDeclareFunctionRegSetValueExALib"advapi32.dll"(ByValhKeyAsLong,ByVallpValueNameAsString,ByValReservedAsLong,ByValdwTypeAsLong,ByReflpDataAsLong,ByValcbDataAsLong)AsLong
PrivateDeclareFunctionRegQueryValueExLib"advapi32.dll"Alias"RegQueryValueExA"(ByValhKeyAsLong,ByVallpValueNameAsString,ByVallpReservedAsLong,lpTypeAsLong,lpDataAsAny,lpcbDataAsLong)AsLong 'NotethatifyoudeclarethelpDataparameterasString,youmustpassitByValue.
PrivateDeclareFunctionRegDeleteKeyLib"advapi32.dll"Alias"RegDeleteKeyA"(ByValhKeyAsLong,ByVallpSubKeyAsString)AsLong
PrivateDeclareFunctionRegSaveKeyLib"advapi32.dll"Alias"RegSaveKeyA"(ByValhKeyAsLong,ByVallpFileAsString,ByVallpSecurityAttributesAsLong)AsLong
PrivateDeclareFunctionRegRestoreKeyLib"advapi32.dll"Alias"RegRestoreKeyA"(ByValhKeyAsLong,ByVallpFileAsString,ByValdwflagsAsLong)AsLong
PrivateTypeFILETIME
dwLowDateTimeAsLong
dwHighDateTimeAsLong
EndType
PrivateTypeSECURITY_ATTRIBUTES
nLengthAsLong
lpSecurityDescriptorAsLong
bInheritHandleAsBoolean
EndType
PublicFunctionGetValue(ByValmainKeyAsenumRegMainKey,_
ByValsubKeyAsString,_
ByValkeyVAsString,_
ByRefsValueAsVariant,_
OptionalByRefrlngErrNumAsLong,_
OptionalByRefrstrErrDescrAsString)AsBoolean
DimhKeyAsLong,lTypeAsLong,lBufferAsLong,sBufferAsString,lDataAsLong
OnErrorGoToGetValueErr
GetValue=False
IfRegOpenKeyEx(mainKey,subKey,0,KEY_READ,hKey)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"获取注册表值时出错"
EndIf
IfRegQueryValueEx(hKey,keyV,0,lType,ByVal0,lBuffer)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"获取注册表值时出错"
EndIf
SelectCaselType
CaseiREG_SZ
lBuffer=255
sBuffer=Space(lBuffer)
IfRegQueryValueEx(hKey,keyV,0,lType,ByValsBuffer,lBuffer)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"获取注册表值时出错"
EndIf
sValue=Left(sBuffer,InStr(sBuffer,Chr(0))-1)
CaseiREG_EXPAND_SZ
sBuffer=Space(lBuffer)
IfRegQueryValueEx(hKey,keyV,0,lType,ByValsBuffer,lBuffer)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"获取注册表值时出错"
EndIf
sValue=Left(sBuffer,InStr(sBuffer,Chr(0))-1)
CaseiREG_DWORD
IfRegQueryValueEx(hKey,keyV,0,lType,lData,lBuffer)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"获取注册表值时出错"
EndIf
sValue=lData
CaseiREG_BINARY
IfRegQueryValueEx(hKey,keyV,0,lType,lData,lBuffer)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"获取注册表值时出错"
EndIf
sValue=lData
EndSelect
IfRegCloseKey(hKey)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"获取注册表值时出错"
EndIf
GetValue=True
Err.Clear
GetValueErr:
rlngErrNum=Err.Number
rstrErrDescr=Err.Description
EndFunction
PublicFunctionSetValue(ByValmainKeyAsenumRegMainKey,_
ByValsubKeyAsString,_
ByValkeyVAsString,_
ByVallTypeAsenumRegSzType,_
ByValsValueAsVariant,_
OptionalByRefrlngErrNumAsLong,_
OptionalByRefrstrErrDescrAsString)AsBoolean
DimSAsLong,lBufferAsLong,hKeyAsLong
DimssAsSECURITY_ATTRIBUTES
OnErrorGoToSetValueErr
SetValue=False
ss.nLength=Len(ss)
ss.lpSecurityDescriptor=0
ss.bInheritHandle=True
IfRegCreateKeyEx(mainKey,subKey,0,"",0,KEY_WRITE,ss,hKey,S)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"设置注册表时出错"
EndIf
SelectCaselType
CaseiREG_SZ
lBuffer=LenB(sValue)
IfRegSetValueEx(hKey,keyV,0,lType,ByValsValue,lBuffer)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"设置注册表时出错"
EndIf
CaseiREG_EXPAND_SZ
lBuffer=LenB(sValue)
IfRegSetValueEx(hKey,keyV,0,lType,ByValsValue,lBuffer)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"设置注册表时出错"
EndIf
CaseiREG_DWORD
lBuffer=4
IfRegSetValueExA(hKey,keyV,0,lType,sValue,lBuffer)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"设置注册表时出错"
EndIf
CaseiREG_BINARY
lBuffer=4
IfRegSetValueExA(hKey,keyV,0,lType,sValue,lBuffer)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"设置注册表时出错"
EndIf
CaseElse
Err.RaisevbObjectError+1,,"不支持该参数类型"
EndSelect
IfRegCloseKey(hKey)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"设置注册表时出错"
EndIf
SetValue=True
Err.Clear
SetValueErr:
rlngErrNum=Err.Number
rstrErrDescr=Err.Description
EndFunction
PublicFunctionDeleteValue(ByValmainKeyAsenumRegMainKey,_
ByValsubKeyAsString,_
ByValkeyVAsString,_
OptionalByRefrlngErrNumAsLong,_
OptionalByRefrstrErrDescrAsString)AsBoolean
DimhKeyAsLong
OnErrorGoToDeleteValueErr
DeleteValue=False
IfRegOpenKeyEx(mainKey,subKey,0,KEY_WRITE,hKey)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"删除注册表值时出错"
EndIf
IfRegDeleteValue(hKey,keyV)<>ERROR_SUCCESSThen
Err.RaisevbObjectError+1,,"删除注册表值时出错"
EndIf
IfRegCloseKey(hKey)<>ERROR_S