如何获取注册表中某一主键下的若干主键名
编号:QA002138
建立日期: 1999年12月1日 最后修改日期:1999年12月1日
所属类别:
wxh:
操作系统: win98
编程工具: vb6.0
问题: 我想请教关于VB API函数的用法。请问如果想获取注册表中某一主键下的若干主键名,是否用RegEnumkeyEx就行?我写出以下代码,老是出错?不知为何?
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public strFTPDbs(20) As String
Public iDBCount As Integer
Public Const REGKEYConnect = "SOFTWARE\MainKey"
Sub Main()
On Error GoTo ErrHandler
Dim lRetCode As Long ' 返回代码
Dim hKey As Long ' 打开的注册表键句柄
Dim lKeyValSize As Long ' 注册表键变量大小
Dim lpReserved As Long
Dim lpClass As String
Dim lpcbClass As Long
Dim lpftLastWriteTime As FILETIME
' 在键根{HKEY_LOCAL_MACHINE...}之下打开注册键
lRetCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGKEYConnect, 0, KEY_ALL_ACCESS, hKey) ' 打开注册表键
If (lRetCode <> ERROR_SUCCESS) Then GoTo GetKeyError ' 错误处理...
lKeyValSize = 1024 ' 标记变量大小
lpClass = vbNullString
iDBCount = 0
lRetCode = RegEnumKeyEx(hKey, iDBCount, strFTPDbs(iDBCount), lKeyValSize, 0, lpClass, lpcbClass, lpftLastWriteTime) ' 获得/创建键值
''''''''''此处lRetCode返回值87
If (lRetCode <> ERROR_SUCCESS) Then GoTo GetKeyError ' 错误处理
lRetCode = RegCloseKey(hKey) ' 关闭注册表键
Exit Sub ' 退出
GetKeyError: ' Cleanup After An Error Has Occured...
lRetCode = RegCloseKey(hKey) ' 关闭注册表键
Exit Sub
ErrHandler:
MsgBox "err!"
End Sub
回答:
你的基本用法是正确的,但在调用RegEnumKeyEx之前少了一句:
strFTPDbs(iDBCount) = Space(1024)
VB的字符串是可变长的,根据需要分配空间。但API调用之前必须分配足够的空间,否则调用会出错。
相关问题:
QA003447 "如何用程序取到注册表中列在右边的所有项"
此问题由李海回答。
| |
|
|
| |
|
|