热情软件屋

 

如何获取注册表中某一主键下的若干主键名


编号: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 "如何用程序取到注册表中列在右边的所有项"

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio