📄 040108.htm
字号:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>vb study</title>
<style>
<!--
td {font-size: 9pt}
A:link {text-decoration: none; color: #0033cc;font-size: 9pt}
A:visited {text-decoration: none; color: #0066CC;font-size: 9pt}
A:active {text-decoration: none; color: #ff0000; font-size: 9pt}
A:hover {text-decoration: underline; color: #000000;font-size: 9pt}
-->
</style>
</head>
<body>
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="98%">
<tr>
<td width="100%"><a href="#">你的位置</a>:<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="#">VB学习</a>--<a href="#">API函数</a></td>
</tr>
<tr>
<td width="100%">
<p align="center">操作注册表函数</td>
</tr>
<tr>
<td width="100%"><br>
打开1个任意的注册表主键,并获得其句柄:RegOpenKeyA函数,声明:<br>
Declare Function RegOpenKeyA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long<br>
除了七个根目录下的基本主键外,操作其他的下级主键,都要先用此函数打开。并将句柄传到其他函数以操作该键。<br>
参数:<br>
hKey Long,指定一个基本主键(那七个主键箱之一)。 <br>
lpSubKey String,要打开的主键名 ,是hKey指定主键的下级主键,<br>
phkResult Long,指定一个变量,用于装载本函数打开的主键的句柄,我们主要利用这个参数的返回值。以进行下一步的操作,例:<br>
Public Const HKEY_LOCAL_MACHINE = &H80000002<br>
Dim hKey As Long<br>
Dim lpSubKey As String<br>
Dim phkResult As Long<br>
lpSubKey = "System\CurrentControlSet\Services\RemoteAccess"<br>
lxn = RegOpenKey(HKEY_LOCAL_MACHINE, lpSubKey, phkResult)<br>
函数返回值为零表示成功,如上若lxn为0则表示函数顺利执行,并用phkResult返回打开的主键句柄。我们下面就要用这个值。<br>
读取指定主键下的1个项的值:RegQueryValueExA函数。声明:<br>
Declare Function RegQueryValueExA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long<br>
参数:<br>
hKey Long,一个已打开下级主键句柄(用前面RegOpenKey函数打开的主键,采用其phkResult参数的返回值),也可以是六个基本主键之一。 <br>
lpValueName String,要获取值的项名字 (在主键"文件夹"上双击时右边文本框中"名称"的文字,即注册表项名)<br>
lpReserved Long,未用,设为零 <br>
lpType Long,用于装载取回数据类型的一个变量 ,如文本(值1)或二进制值。<br>
lpData Any,用于装载指定值的一个缓冲区 。注:如果键值是字符串,则要加Byval,否则为指向字符串指针的指针,会出错。<br>
lpcbData Long,用于装载lpData缓冲区长度的一个变量。一旦返回,它会设为实际装载到缓冲区的字节数。<br>
调用如:<br>
Dim lpData As String<br>
LpData=Space(255) '装载字符串值<br>
Dim lpValueName As String<br>
lpValueName = "Remote Connection" '注册表项名称<br>
hKey = phkResult '上例用RegOpenKeyA打开的键句柄。<br>
Dim lpcbData as long<br>
lpcbData=255<br>
ReturnCode = RegQueryValueEx(hKey, lpValueName, 0&, 1&, Byval lpData, lpcbData) <br>
'读取字符串值。第4个参数指明1&,表示返回值为字符串类型。<br>
lpData=Left(lpData,lpcbData)<br>
对于二进制数据的读取:因为在注册表中二进制值用"00 00 00 01"四个字节来表示,因此可将lpData定义为long型数(四个字节),lpcbData参数就固定为4,而lpType参数为3&(二进制类型),如:<br>
Dim lpData As Long<br>
ReturnCode=RegQueryValueEx(hKey, lpValueName, 0&, 3&, lpData, 4)<br>
[问题:lpData参数的返回值与二进制值关系怎样?如二进制值<br>
01 00 00 00 --> lpData=1<br>
10 00 00 00 --> lpData=16……<br>
00 00 00 01 --> lpData=16777216.<br>
是二进制吗?我怎么看着象16进制?]<br>
创建/修改指定键中项的值:RegSetValueExA函数,声明:<br>
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long <br>
参数与RegQueryValueEx函数类似,如下:<br>
hKey Long,一个已打开键的句柄。 <br>
LpValueName String,要设置值的项的名字,如果是1个原来不存在的项名,则会在该键内创建1个此名字的注册表项。如果是原来存在的项,则会修改这个项的原有值。 如果指定1个空字符串,则表示"(默认)"项。<br>
Reserved Long,未用,设为零 。<br>
dwType Long,要设置的数据类型,字符串值为1,二进制值为3。 <br>
lpData Any,要设置的键值变量缓冲区。注意,字符串值要加上Byval。 <br>
cbData Long,lpData字符串(或数据)的字节长度。调用如:<br>
Dim lgs As String<br>
lgs = "这句话存到注册表中" & Chr(0)<br>
a = RegOpenKey(HKEY_LOCAL_MACHINE, "config\0001", lxn)<br>
RegSetValueEx lxn, "abc", 0&, 1&, ByVal lgs, Len(lgs)+1<br>
参数其实简单讲就是:键句柄,项名,0,1,Byval要写入的字串,字串长度。<br>
删除1个项的值:RegDeleteValueA函数。声明:<br>
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long<br>
参数hKey为1个打开的主键名,要删除的项就在这个主键内。<br>
参数lpValueName为要删除的注册表项名称,如果指定1个空串,表示删除该键的默认项值。调用如:<br>
Dim lxn As Long<br>
a = RegOpenKey(HKEY_LOCAL_MACHINE, "config\0001", lxn)<br>
RegDeleteValue lxn, ""<br>
-------------------------------------------------------------<br>
创建1个主键:RegCreateKeyA函数<br>
此函数在指定主键下创建下级主键,注:创建的是"主键"(象文件夹)而不是项(右边框中的"注册表项名称")。创建项只要用上面的RegSetValueEx就行了。 声明:<br>
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long<br>
参数hKey指定1个打开的任意主键,或六个基本键箱,lpSubKey是新创建的主键名,可有多级子路径,phkResult返回刚刚创建的主键句柄。调用如:<br>
RegCreateKeyA HKEY_CURRENT_USER, "江西 \宁都 \湛田 \吉富", lxn<br>
其实这里不仅创建了"吉富"键,同时创建了"江西""宁都""湛田"三个它的上级主键。"江西"键在主键箱HKEY_CURRENT_USER下,整条路径为:<br>
HKEY_CURRENT_USER\江西 \宁都 \湛田 \吉富 带下划线为新创建的多级子键。<br>
[问题:如果"创建"现存的键,会不会清空键的原有内容?]<br>
当然,你也可以在现有的任意主键(非主键箱)下创建子键,但必须先打开那个主键,如:<br>
Dim lgs As Long, lxn As Long<br>
a = RegOpenKey(HKEY_CURRENT_USER, "AppEvents\EventLabels", lxn)<br>
b = RegCreateKey(lxn, "新键1", lgs)<br>
上例新创建的键路径就是HKEY_CURRENT_USER\AppEvents\EventLabels\新键1,<br>
删除1个主键:RegDeleteKeyA函数,声明:<br>
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long<br>
参数hKey为打开的1个主键句柄,也可直接指定为1个主键箱。<br>
参数lpSubKey为指定要删除的主键,要包含在hKey指定的主键下。调用如:<br>
RegDeleteKey HKEY_CURRENT_USER, "AppEvents\ndlxn1"<br>
上句删除了HKEY_CURRENT_USER\AppEvents\ndlxn1键。<br>
关闭1个打开的键:RegCloseKey函数。在修改增删完1个键的项值后,应当关闭这个键,参数只要将被RegOpenKeyA的键句柄传入即可,声明:<br>
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long<br>
例如:a = RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\Microsoft", lxn)<br>
b=RegCloseKey(lxn)<br>
要养成1个习惯,每用RegOpenKeyA打开1个键,使用完后就用本函数将其关闭。
<p align="center">
<br>
< <a href="040107.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="040109.htm">下一页</a>
><br>
</td>
</tr>
</table>
</center>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -