• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 9358
  • Last Modified:

Enumerate Registry keys

Hi! Experts

I want to enumerate the registry keys [under HKCU\Software] and add the keys to a List box in VB. I prefer using VBScript instead of API. How do I accomplish this using VBS and integrate with VB?

Thanks!
0
sramesh2k
Asked:
sramesh2k
  • 3
  • 3
1 Solution
 
ArkCommented:
Add command button and listbox on form:

Private Sub Command1_Click()
   Const HKEY_CURRENT_USER = &H80000001
   strComputer = "."
   Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
   strKeyPath = "SOFTWARE"
   objReg.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubKeys
   For Each subkey In arrSubKeys
       List1.AddItem subkey
   Next
End Sub
0
 
sramesh2kAuthor Commented:
That worked great! Related question, if you dont mind. Within this script, how do I set a certain criteria [example.., to list only the keys with the value "Installed" =1 in the right pane]
0
 
sramesh2kAuthor Commented:
And does it work with Windows 9x systems as well..?
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
ArkCommented:
Private Sub Command1_Click()
   Const HKEY_CURRENT_USER = &H80000001
   strComputer = "."
   Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
   strKeyPath = "SOFTWARE"
   objReg.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubKeys
   For Each subkey In arrSubKeys
       ret = objReg.GetStringValue(HKEY_CURRENT_USER, strKeyPath & "\Installed", sValue 'if 1 is a string
'Or   ret =  objReg.GetDWORDValue(HKEY_CURRENT_USER, strKeyPath & "\Installed", lValue if 1 is DWORD
       If ret<>0 Then
          List1.AddItem subkey & "Installed info - not found"
       Else
          List1.AddItem subkey & "Installed info - " & sValue
       End If
   Next
End Sub

PS
WMI instrumentation distributed by MS with w2000/Xp, but there is free redistributable package from MS for w9x
0
 
ArkCommented:
BTW, WMI itself have Installed software enumerator:

Private Sub Form_Load()
  EnumerateInstalledSoftware ListView1
End Sub

Private Sub Form_Resize()
   If WindowState = vbMinimized Then Exit Sub
   ListView1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub

Private Sub EnumerateInstalledSoftware(lv As ListView)
   lv.ListItems.Clear
   lv.ColumnHeaders.Clear
   lv.View = lvwReport
   With lv.ColumnHeaders
      .Add , , "Caption"
      .Add , , "Description"
      .Add , , "Identifying Number"
      .Add , , "Install Date"
      .Add , , "Install Location"
      .Add , , "Install State"
      .Add , , "Name"
      .Add , , "Package Cache"
      .Add , , "SKU Number"
      .Add , , "Vendor"
      .Add , , "Version"
   End With
   strComputer = "."
   Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
   Set colSoftware = objWMIService.ExecQuery("Select * from Win32_Product")
   On Error Resume Next
   For Each objSoftware In colSoftware
       With lv.ListItems.Add(, , objSoftware.Caption)
            .SubItems(1) = objSoftware.Description
            .SubItems(2) = objSoftware.IdentifyingNumber
            .SubItems(3) = Str2Date(objSoftware.InstallDate)
            .SubItems(4) = objSoftware.InstallLocation
            .SubItems(5) = GetInstallState(objSoftware.InstallState)
            .SubItems(6) = objSoftware.Name
            .SubItems(7) = objSoftware.PackageCache
            .SubItems(8) = objSoftware.SKUNumber
            .SubItems(9) = objSoftware.Vendor
            .SubItems(10) = objSoftware.Version
      End With
   Next
End Sub

Private Function Str2Date(ByVal sDate As String) As Date
   Str2Date = DateSerial(Left(sDate, 4), Mid(sDate, 5, 2), Mid(sDate, 7, 2))
End Function

Private Function GetInstallState(ByVal state As Integer) As String
    Select Case state
           Case 6: GetInstallState = "Bad Configuration"
           Case -2: GetInstallState = "Invalid Argument"
           Case -1: GetInstallState = "Unknown Package"
           Case 1: GetInstallState = "Advertised"
           Case 2: GetInstallState = "Absent"
           Case 5: GetInstallState = "Installed"
   End Select
End Function
0
 
sramesh2kAuthor Commented:
superb! :-)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now