CodeItBetter Programming Another VB Programming Blog

How to list all installed apps

Posted on January 4, 2009
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
'System & API - How to list all installed apps
Option Explicit
 
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
    (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
    lpType As Long, lpData As Any, lpcbData As Long) As Long
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 RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" _
    (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, _
    ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, _
    lpftLastWriteTime As FILETIME) As Long
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
'Private Const ERROR_NO_MORE_ITEMS = 259&
Private Const REG_SZ = 1
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Dim RetArray() As String
 
Sub main()
    Call GetInstalledApps
    Dim I As Long
    For I = LBound(RetArray) To UBound(RetArray)
        Debug.Print RetArray(I)
    Next I
End Sub
 
Public Sub GetInstalledApps()
    Dim hParentKey As Long
    Dim hSubKey As Long
    Dim lIndex As Long
    Dim sAppID As String
    Dim lAppID As Long
    Dim sAppName As String
    Dim lAppName As Long
    Dim ValueType As Long
    Dim DummyTime As FILETIME
    Dim UbRetArray As Long
    'Dim QVErr As Long
    'Dim sErr As String
    'Dim lErr As Long

    UbRetArray = -1
    If RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Uninstall", _
        0, KEY_ENUMERATE_SUB_KEYS, hParentKey) = 0 Then
        sAppID = Space(64)
        lAppID = 64
        Do While RegEnumKeyEx(hParentKey, lIndex, sAppID, lAppID, 0, vbNullString, 0, DummyTime) = 0
            sAppID = Left(sAppID, lAppID)
            If RegOpenKeyEx(hParentKey, sAppID, 0, KEY_QUERY_VALUE, hSubKey) = 0 Then
                lAppName = 0
                If RegQueryValueEx(hSubKey, "DisplayName", 0, ValueType, ByVal 0, lAppName) = 0 Then
                    If ValueType = REG_SZ Then
                        sAppName = Space(lAppName)
                        RegQueryValueEx hSubKey, "DisplayName", 0, 0, ByVal sAppName, lAppName
                        sAppName = Left(sAppName, lAppName - 1)
                        UbRetArray = UbRetArray + 1
                        ReDim Preserve RetArray(UbRetArray)
                        RetArray(UbRetArray) = sAppName
                    End If
                End If
                RegCloseKey hSubKey
                hSubKey = 0
            End If
            lIndex = lIndex + 1
            sAppID = Space(64)
            lAppID = 64
        Loop
        RegCloseKey hParentKey
    End If
    'GetInstalledApps = RetArray
End Sub
Comments (0) Trackbacks (0)

No comments yet.


Leave a comment


 

No trackbacks yet.