返回列表 发帖

[问题求助] VBS怎样对注册表循环读取?

Private Shared Sub GetVersionFromRegistry()
    Using ndpKey As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey("SOFTWARE\Microsoft\NET Framework Setup\NDP\")
        For Each versionKeyName As String In ndpKey.GetSubKeyNames()
            If versionKeyName.StartsWith("v") Then
                Dim versionKey As RegistryKey = ndpKey.OpenSubKey(versionKeyName)
                Dim name As String = DirectCast(versionKey.GetValue("Version", ""), String)
                Dim sp As String = versionKey.GetValue("SP", "").ToString()
                Dim install As String = versionKey.GetValue("Install", "").ToString()
                If install = "" Then
                    'no install info, ust be later
                    Console.WriteLine(versionKeyName & "  " & name)
                Else
                    If sp <> "" AndAlso install = "1" Then
                        Console.WriteLine(versionKeyName & "  " & name & "  SP" & sp)
                    End If
                End If
                If name <> "" Then
                    Continue For
                End If
                For Each subKeyName As String In versionKey.GetSubKeyNames()
                    Dim subKey As RegistryKey = versionKey.OpenSubKey(subKeyName)
                    name = DirectCast(subKey.GetValue("Version", ""), String)
                    If name <> "" Then
                        sp = subKey.GetValue("SP", "").ToString()
                    End If
                    install = subKey.GetValue("Install", "").ToString()
                    If install = "" Then
                        'no install info, ust be later
                        Console.WriteLine(versionKeyName & "  " & name)
                    Else
                        If sp <> "" AndAlso install = "1" Then
                            Console.WriteLine("  " & subKeyName & "  " & name & "  SP" & sp)
                        ElseIf install = "1" Then
                            Console.WriteLine("  " & subKeyName & "  " & name)
                        End If
                    End If
                Next
            End If
        Next
    End Using
End SubCOPY
这个是VB.NET ,能否改成VBS版本..

没看懂
解释下你要进行什么操作

QQ 20147578

TOP

[原创] 读取、新建、修改、删除注册表键值专题帖
本帖最后由 batman 于 2012-12-26 00:02 编辑
http://www.bathome.net/thread-21223-1-1.html
'枚举注册表项及值
Const HKEY_LOCAL_MACHINE = &H80000002
Dim regWMI, FSO, Text
Set FSO = CreateObject("Scripting.FileSystemObject")
Set regWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
Dim regRoot, regPath, regStr
regRoot = HKEY_LOCAL_MACHINE
regPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
FSO.OpenTextFile("RegList.txt", 2, True).Write "HomePath:HKEY_LOCAL_MACHINE" & regPath & vbCrLf & vbcrlf & "RegList:" & vbCrLf
Set Text = FSO.OpenTextFile("RegList.txt", 8, True)
GetValues regPath
GetKeys regPath
Set FSO = Nothing
Set regWMI = Nothing
CreateObject("Wscript.Shell").run "cmd /cRegList.txt", True, False
Function GetKeys(Path)
  'Text.WriteLine path & vbCrLf
  Dim arrRegKeys, regKey
  regWMI.Enumkey regRoot, path, arrRegKeys
  For Each regKey In arrRegKeys
    On Error Resume Next
    newpath = path & "\" & regKey
    GetValues newpath
    GetKeys newpath
  Next
End Function
Function GetValues(path)
  Dim regValue, arrRegNames, arrValueTypes, arrRegValues, Multi, regValueType
  regWMI.EnumValues regRoot, path, arrRegNames, arrValueTypes
  For i = 0 To UBound(arrRegNames)
    If Len(arrRegNames(i)) > 0 Then
      Multi = vbNullString
      Select Case arrValueTypes(i)
        Case 1
          regWMI.GetStringValue regRoot, path, arrRegNames(i), regValue
          regValueType = "REG_SZ"
        Case 2
          regWMI.GetExpandedStringValue regRoot, path, arrRegNames(i), regValue
          regValueType = "REG_EXPAND_SZ"
        Case 3
          regWMI.GetBinaryValue regRoot, path, arrRegNames(i), regValue
          regValueType = "REG_BINARY"
        Case 4
          regWMI.GetDwordValue regRoot, path, arrRegNames(i), regValue
          regValueType = "REG_DWORD"
        Case 7
          regWMI.GetMultiValue regRoot, path, arrRegNames(i), arrRegValues
          regValueType = "REG_MULTI_SZ"
          Multi = "yes"
      End Select
      If Multi = "yes" Then
        For Each str In arrRegValues
          regValue = regValue & str & vbTab
        Next
      End If
      newpath = Replace(path, regPath, "")
      If Left(newpath, 1) = "\" Then newpath = Mid(newpath,2,Len(newpath))
      Text.WriteLine newpath & arrRegNames(i) & vbTab & regValueType & vbTab & regValue
    End If
  Next
End FunctionCOPY
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

返回列表