当前位置:编程学习 > VB >>

VB如何修改注册表

如题

 

以添加、修改、删除开机启动项为例出示一下代码

如果以别的也可以

答案:VB操作注册表--所用函数收录

RegOpenKey--取得SubKey的Hkey

VB声明DeclareFunctionRegOpenKeyLib"advapi32.dll"Alias"RegOpenKeyA"
AsLong
参数类型及说明:
hKey:KeyHandle
lpSubKey:SubKey名称或路径
phkResult:若RegOpenKey执行成功,则这一参数返回Subkey的hKey.

返回值:=0,表示成功;≠0,表示失败。[注意这一点与别的API函数不太一样]

e.g:
ret=RegOpenKey



RegCreateKey函数:建立SubKey
VB声明DeclareFunctionRegCreateKeyLib"advapi32.dll"Alias"RegCreateKeyA"
AsLong
它的参数用法与RegOpenKey一样。所不同的是RegOpenKey只能打开已经有的SubKey,而RegCreateKey则可以建立SubKey,比较特别的是,如果调用RegCreateKey所建立的SubKey是一个已经存在的SubKey,则它的功能和RegOpenKey相同。由于RegCreateKey的这种特性,有的程序员干脆不用RegOpenKey,而用RegCreateKey来统一代替RegOpenKey。
e.g:
ret=RegCreateKey



RegClose函数:关闭SubKey
DeclareFunctionRegCloseKeyLib"advapi32.dll"AsLong
当我们不再存取Registry时,将打开或建立的SubKey关闭是一个比较好的习惯,就正如我们在使用的文件打开函数后必须要关闭一样。
e.g:
ret=RegOpenKey
....
RegClosehkey



RegQueryValue--读取某Key的默认值

VB声明
DeclareFunctionRegQueryValueLib"advapi32.dll"Alias"RegQueryValueA"AsLong
hKey:KeyHandle
lpSubKey:SubKey名称路径
lpValue:返回读取的DefaultValue
lpcbValue:传入lpValue参数的长度,若成功读取了默认值defaultvalue,则返回defaultvalue字符串的长度)这个和C语言中字符串的处理相似,都是以chr作为结束符。

返回值:=0,表示成功;≠0,表示失败。
e.g:
ret=RegQueryValue



RegSetValue--删除某Key的默认值

VB声明
DeclareFunctionRegSetValueLib"advapi32.dll"Alias"RegSetValueA"AsLong
hKey:KeyHandle
lpSubKey:Subkey名称或路径
dwType:数据类型,但在这里只能接受REG_SZ[字符串类型]
lpData:所设置的字符串
cbData:lpData字符串的长度,这一长度包括chr字符。
关于dwType的可能取值
EnumValueType
REG_NONE=0
REG_SZ=1
REG_EXPAND_SZ=2
REG_BINARY=3
REG_DWORD=4
REG_DWORD_BIG_ENDIAN=5
REG_MULTI_SZ=7
EndEnum

e.g:
FunctionSetDefaultValueAsBoolean
DimretAsLong,lenSAsLong,SAsString
ret=RegSetValue)+1)SetDefaultValue=
EndFunction



RegQueryValueEx--读取某Key的特定名称的值
Vb声明和参数解释:
DeclareFunctionRegQueryValueExLib"advapi32.dll"Alias"RegQueryValueExA"AsLong
hkey:KeyHandle
lpValueName:ValueName
lpReserved:保留参数,调用时设置为0即可
lpType:返回读取的数据类型
lpData:返回读取的数据
lpcbData:传入lpData数据的长度,若成功读取数据,则返回所读取的数据的长度。
返回值:=0,表示成功;≠0,表示失败。
说明:
1、这一函数除了可读取指定名称的值之外,也可以读取defaultvalue。如果要读取defaultvalue,只需要将
参数lpValueName设置为""[空字符串]即可。
2、lpType的可能取值
EnumValueType
REG_NONE=0
REG_SZ=1-->字符串
REG_EXPAND_SZ=2-->可展开式字符串
REG_BINARY=3-->Binary数据
REG_DWORD=4-->长整数
REG_DWORD_BIG_ENDIAN=5-->BIG_ENDIAN长整数
REG_MULTI_SZ=7-->多重字符串
EndEnum

e.g:
DimhKeyAsLong,retAsLong,lenDataAsLong,typeDataAsLong
DimNameAsString
`读取HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun的internat.exe的value.
Name="internat.exe"
ret=RegOpenKey
ifret=0then
ret=RegQueryValueEx`注意ByVal千万别忘了
endif



RegEnumValue--列出某Key的所有名称的值

DeclareFunctionRegEnumValueLib"advapi32.dll"Alias"RegEnumValueA"AsLong
`以下的两个函数是经过王国荣老师改编过的函数,与此相关,也一并列出.并且在我们的例子程序中要用到它们。RegEnumValueAsAny可以传入长整数和字符串;RegEnumValueAsAny2中lpData参数被改成Any后,可以使用Byte数组,由于Byte数组是采用”传地址方式来传递参数的,可以省下复制字符串数据的时间,使得程序变得更加高效。
DeclareFunctionRegEnumValueAsAnyLib"advapi32.dll"Alias"RegEnumValueA"AsLong

DeclareFunctionRegEnumValueAsAny2Lib"advapi32.dll"Alias"RegEnumValueA"AsLong
参数说明:
hKey:KeyHandle
dwIndex:欲读取之名称的顺序
lpValueName:返回所读取的名称
lpcbValueName:传入lpValueName参数的长度,返回所读取的名称的长度,注意这一长度不含chr
lpReserved:保留参数,实际使用时传入ByVal0即可
lpType:返回所读取的数据类型
lpData:返回所读取的数据
lpcbData:传入lpData,返回所读取的数据长度
返回值:=0,表示成功;≠0,表示失败。

调用例子:
ret=0
myindex=0
whileret=0
ret=RegEnumValue
myindex=myindex+1
wend



RegSetValueEx--设置某Key特定名称的值

DeclareFunctionRegSetValueExLib"advapi32.dll"Alias"RegSetValueExA"AsLong
参数:
hKey:KeyHandle
lpValueName:Value名称
Reserved:保留参数,具体使用时置为0即可
dwType:数据类型
lpData:所设置的数据,注意这一参数被定义成lpDataAsAny,所以要传入字符串数据时别忘了在参数前加保留字ByVal
cbData:数据的长度。注意:如果写入的数据属于REG_SZ、REG_EXPAND_SZ、REG_MULTI_SZ类型时,则这个长度应该包含chr字符。
返回值:=0,表示成功;≠0,表示失败。
e.g:
DimhKeyAsLong
DimLAsLong
L=99999
RegCreateKeyHKEY_CURRENT_USER,"SoftwareSetValue",hKey
RegSetValueExhKey,"LongData",0,REG_DWORD,L,4



RegDeleteValue--删除某Key的某一名称

DeclareFunctionRegDeleteValueLib"advapi32.dll"Alias"RegDeleteValueA"AsLong
参数:
hKey:KeyHandle
lpValueName:Value名称,如果想删除默认值的话,传入""[空字符串]即可。
返回值:=0,表示成功;≠0,表示失败。
函数调用例:
`我们假设在HKEY_CURRENT_USERSoftwareSetValue有:
`预设值--VB操作注册表
`str1--我爱我的祖国
`我们要删除这两个Value
ret=RegOpenKey
Ifret=0Then
RegDeleteValuehKey,"Str1"
MsgBox"已删除HKCUSoftwareSetValueSubKeyStr1Value"
RegDeleteValuehKey,""
MsgBox"已删除HKCUSoftwareSetValueSubKey‘预设值’"
EndIf



RegEnumKey--列出某Key的所有SubKey

DeclareFunctionRegEnumKeyLib"advapi32.dll"Alias"RegEnumKeyA"AsLong
参数说明:
hKey:KeyHandle
dwIndex:欲读取的SubKey的顺序
lpName:返回所读取的SubKey的名称
cbName:传入lpName的字符串长度。
返回值:=0,表示成功;≠0,表示失败。
调用例:
DimhKeyAsLong,retAsLong,NameAsString,IdxAsLong
List1.Clear
Idx=0
Name=String)
Do
ret=RegEnumKey)
Ifret=0Then
List1.AddItemLeft)-1)
Idx=Idx+1
EndIf
LoopUntilret<>0



RegDeleteKey--删除Key或者SubKey

DeclareFunctionRegDeleteKeyLib"advapi32.dll"Alias"RegDeleteKeyA"AsLong
参数:
hKey:KeyHandle
lpSubKey:SubKey名称或者路径,若传入""[空字符串],表示删除Key本身。
返回值:=0,表示成功;≠0,表示失败。

eg:
DimhKey,retAsLong
ret=RegCreateKey
ret=RegOpenKey
ret=RegDeleteKey`删除HKEY_LOCAL_MACHINESOFTWAREHongqtxiaoyuer
注意:
如果我们利用RegDeleteKey函数删除一个含有SubKey的Key时,对于Windows98和Winnt来讲是不一样的。比如我们把上面的删除调用改成ret=RegDeleteKey,则在windows98下,它会连hongqt下的xiaoyuer一起删除,而在winnt下则会报错。

知道启动项目的注册表位置后直接调用RegXX系列的API就可以完成了,最后swzsoft.taobao,com提供程序代写

上一个:VB是什么语言
下一个:求VB高手帮忙

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,