如何枚举注册表项的值

文章翻译 文章翻译
文章编号: 178755 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

RegEnumValue 函数允许您枚举注册表项的值。程序设置通常存储在注册表中。从头到尾对一个注册表项,您可以读取程序的注册表设置,以便下次启动该程序时恢复设置。

本文介绍如何使用 RegEnumValue 函数来枚举注册表项的值。

更多信息

下面是 Visual Basic 声明语句为 RegEnumValue
   Private Declare Function RegEnumValue Lib "advapi32.dll" _
                   Alias "RegEnumValueA" _
                   (ByVal hKey As Long, _
                   ByVal dwIndex As Long, _
                   ByVal lpValueName As String, _
                   lpcbValueName As Long, _
                   ByVal lpReserved As Long, _
                   lpType As Long, _
                   lpData As Any, _
                   lpcbData As Long) As Long

				
RegEnumValue 函数是不正确,API 文本查看器中列出的函数声明。第五个参数是 lpReserved,应按上面所示的值传递。有关详细的信息,请参阅下面 Microsoft 知识库中相应的文章:
173009PRB: 运行时错误 87 使用 RegEnumValue 函数
下一节说明了如何创建示例项目,在列表框中显示指定的注册表项的值。

分步示例

  1. 在 Visual Basic 中开始一个新的标准 EXE 项目。默认情况下创建 Form1。
  2. 向 Form1 中添加命令按钮和列表框控件。因为许多条目的冗长,应该跨整个窗体的宽度扩展列表框。列表框的高度应该是多行。
  3. 将以下代码粘贴到 Form1 的代码窗口中:
          Option Explicit
    
          Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _
              Alias "RegOpenKeyExA" _
              (ByVal hKey As Long, _
              ByVal lpSubKey As String, _
              ByVal ulOptions As Long, _
              ByVal samDesired As Long, phkResult As Long) As Long
    
          Private Declare Function RegEnumValue Lib "advapi32.dll" _
              Alias "RegEnumValueA" _
              (ByVal hKey As Long, _
              ByVal dwIndex As Long, _
              ByVal lpValueName As String, _
              lpcbValueName As Long, _
              ByVal lpReserved As Long, _
              lpType As Long, _
              lpData As Any, _
              lpcbData As Long) As Long
    
          Private Declare Function RegCloseKey Lib "advapi32.dll" _
              (ByVal hKey As Long) As Long
    
          Const HKEY_CLASSES_ROOT = &H80000000
          Const HKEY_CURRENT_USER = &H80000001
          Const HKEY_LOCAL_MACHINE = &H80000002
          Const HKEY_USERS = &H80000003
    
          Const ERROR_SUCCESS = 0&
    
          Const SYNCHRONIZE = &H100000
          Const STANDARD_RIGHTS_READ = &H20000
          Const STANDARD_RIGHTS_WRITE = &H20000
          Const STANDARD_RIGHTS_EXECUTE = &H20000
          Const STANDARD_RIGHTS_REQUIRED = &HF0000
          Const STANDARD_RIGHTS_ALL = &H1F0000
          Const KEY_QUERY_VALUE = &H1
          Const KEY_SET_VALUE = &H2
          Const KEY_CREATE_SUB_KEY = &H4
          Const KEY_ENUMERATE_SUB_KEYS = &H8
          Const KEY_NOTIFY = &H10
          Const KEY_CREATE_LINK = &H20
          Const KEY_READ = ((STANDARD_RIGHTS_READ Or _
                            KEY_QUERY_VALUE Or _
                            KEY_ENUMERATE_SUB_KEYS Or _
                            KEY_NOTIFY) And _
                            (Not SYNCHRONIZE))
    
          Const REG_DWORD = 4
          Const REG_BINARY = 3
          Const REG_SZ = 1
    
          Private Sub Command1_Click()
             Dim lngKeyHandle As Long
             Dim lngResult As Long
             Dim lngCurIdx As Long
             Dim strValue As String
             Dim lngValueLen As Long
             Dim lngData As Long
             Dim lngDataLen As Long
             Dim strResult As String
    
             lngResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
                     "SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls", _
                      0&, _
                      KEY_READ, _
                      lngKeyHandle)
    
             If lngResult <> ERROR_SUCCESS Then
                 MsgBox "Cannot open key"
                 Exit Sub
             End If
    
             lngCurIdx = 0
             Do
                lngValueLen = 2000
                strValue = String(lngValueLen, 0)
                lngDataLen = 2000
    
                lngResult = RegEnumValue(lngKeyHandle, _
                                         lngCurIdx, _
                                         ByVal strValue, _
                                         lngValueLen, _
                                         0&, _
                                         REG_DWORD, _
                                         ByVal lngData, _
                                         lngDataLen)
                lngCurIdx = lngCurIdx + 1
    
             If lngResult = ERROR_SUCCESS Then
                strResult = lngCurIdx & ": " & Left(strValue, lngValueLen)
                List1.AddItem strResult
             End If
    
             Loop While lngResult = ERROR_SUCCESS
             Call RegCloseKey(lngKeyHandle)
          End Sub
    					
  4. 开始 菜单上单击 运行,或按 F5 键以启动程序。单击 命令按钮。在列表框中显示下面的注册表项的所有值:
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDlls

参考

有关使用 Visual Basic 操作注册表设置的其他信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
145679如何使用注册表 API 保存和检索设置
267908如何枚举一个打开的注册表项的子项

属性

文章编号: 178755 - 最后修改: 2005年3月11日 - 修订: 2.3
这篇文章中的信息适用于:
  • Microsoft Visual Basic 5.0 学习版
  • Microsoft Visual Basic 6.0 学习版
  • Microsoft Visual Basic 5.0 专业版
  • Microsoft Visual Basic 6.0 专业版
  • Microsoft Visual Basic 5.0 企业版
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
关键字:?
kbmt kbapi kbhowto KB178755 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 178755
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com