Servus an Alle!
Habe unten angegebenen Code zum Auslesen der Software aus der Registry verwendet.
Dabei habe ich nun das Problem das lediglich der Foldername unter "Software\Microsoft\Windows\CurrentVersion\Uninstall" der jeweiligen Software ausgelesen und angezeigt wird. Ich möchte aber nicht nach dem Foldernamen suchen und diesen angezeigt bekommen, sondern ich möchte den Namen ausgegeben bekommen der in solch einem Folder unter DisplayName angegeben ist!
Wenn ich nur die Foldernamen ausgebe so kommt zeitweise wirres Zeug wie {FC880800..} raus, wenn ich aber IN DIESEM Folder nach dem DisplayName suche kommt mir der tatsächliche Softwarename heraus.
Ich hoff die Registry-Profis wissen was ich damit meine?
(wenn man auf einen Folder in der Registry geht dann hat man rechts unter DisplayName den wahren Softwarenamen stehen)
Hat wer ne Ahnung wie ich dieses Problem lösen könnte?
(habe ja unten Folder = ...... definiert und dann anschließend If DisplayName = "" Then DisplayName = Folder angegeben; d.h. man müsste Folder anders definieren )
Danke für jede Hilfe im Voraus!
gruß alex (ein schlafloser VB-Anfänger :-( )
' Durchsuchen der Registry wird benötigt! ( Module1)
Private Sub Form_Load()
Dim SO As SearchOptions
Dim Gefunden() As String
Dim I As Integer
Dim Daten() As String
Dim DisplayName As String
Dim RegKey As String
Dim Folder As String
Dim itemX As ListItem
' Registry in der die deinstallierbare Software aufzufinden ist
RegKey = "Software\Microsoft\Windows\CurrentVersion\Uninstall\"
With ListView1
.ListItems.Clear
' Alle Einträge im Schlüssel
' Software\Microsoft\Windows\CurrentVersion\Uninstall ermitteln
With SO
.HowToSearch = StringExists
.SearchMainKey = HKEY_LOCAL_MACHINE
.SearchString = "UninstallString"
.StartSearchPath = RegKey
.SearchSubfolders = True
.FindKeys = True
.FindValueNames = True
.FindValues = True
End With
' Suche starten
FindString SO, Gefunden
On Error Resume Next
For I = 0 To UBound(Gefunden)
Daten = Split(Gefunden(I), vbCrLf)
' SubKey
Folder = Mid$(Daten(0), InStrRev(Daten(0), "\") + 1)
' DisplayName ermitteln
DisplayName = Get_ValueString(HKEY_LOCAL_MACHINE, _
RegKey & "\" & Daten(1), "DisplayName")
If DisplayName = "" Then DisplayName = Folder
' ListView1 Daten in ein .txt schreiben
Dim Filenum As Integer
Dim j As Integer
For j = 0 To ListView1.ListItems.Count - 1
If Left(ListView1.ListItems(j).Text, 2) = "KB" Then
ListView1.ListItems.Remove (j)
End If
Next j
Filenum = FreeFile
Open "C:\software.txt" For Output As #Filenum
For j = 0 To ListView1.ListItems.Count - 1
Print #Filenum, ListView1.ListItems(j).Text
Next j
Close #Filenum
Set itemX = .ListItems.Add(, Daten(0), DisplayName)
' für 2. unnötige Spalte die mehr Informationen ausgeben würde
itemX.SubItems(1) = Daten(2)
Next I
End With
End Sub
Habe unten angegebenen Code zum Auslesen der Software aus der Registry verwendet.
Dabei habe ich nun das Problem das lediglich der Foldername unter "Software\Microsoft\Windows\CurrentVersion\Uninstall" der jeweiligen Software ausgelesen und angezeigt wird. Ich möchte aber nicht nach dem Foldernamen suchen und diesen angezeigt bekommen, sondern ich möchte den Namen ausgegeben bekommen der in solch einem Folder unter DisplayName angegeben ist!
Wenn ich nur die Foldernamen ausgebe so kommt zeitweise wirres Zeug wie {FC880800..} raus, wenn ich aber IN DIESEM Folder nach dem DisplayName suche kommt mir der tatsächliche Softwarename heraus.
Ich hoff die Registry-Profis wissen was ich damit meine?
(wenn man auf einen Folder in der Registry geht dann hat man rechts unter DisplayName den wahren Softwarenamen stehen)
Hat wer ne Ahnung wie ich dieses Problem lösen könnte?
(habe ja unten Folder = ...... definiert und dann anschließend If DisplayName = "" Then DisplayName = Folder angegeben; d.h. man müsste Folder anders definieren )
Danke für jede Hilfe im Voraus!
gruß alex (ein schlafloser VB-Anfänger :-( )
' Durchsuchen der Registry wird benötigt! ( Module1)
Private Sub Form_Load()
Dim SO As SearchOptions
Dim Gefunden() As String
Dim I As Integer
Dim Daten() As String
Dim DisplayName As String
Dim RegKey As String
Dim Folder As String
Dim itemX As ListItem
' Registry in der die deinstallierbare Software aufzufinden ist
RegKey = "Software\Microsoft\Windows\CurrentVersion\Uninstall\"
With ListView1
.ListItems.Clear
' Alle Einträge im Schlüssel
' Software\Microsoft\Windows\CurrentVersion\Uninstall ermitteln
With SO
.HowToSearch = StringExists
.SearchMainKey = HKEY_LOCAL_MACHINE
.SearchString = "UninstallString"
.StartSearchPath = RegKey
.SearchSubfolders = True
.FindKeys = True
.FindValueNames = True
.FindValues = True
End With
' Suche starten
FindString SO, Gefunden
On Error Resume Next
For I = 0 To UBound(Gefunden)
Daten = Split(Gefunden(I), vbCrLf)
' SubKey
Folder = Mid$(Daten(0), InStrRev(Daten(0), "\") + 1)
' DisplayName ermitteln
DisplayName = Get_ValueString(HKEY_LOCAL_MACHINE, _
RegKey & "\" & Daten(1), "DisplayName")
If DisplayName = "" Then DisplayName = Folder
' ListView1 Daten in ein .txt schreiben
Dim Filenum As Integer
Dim j As Integer
For j = 0 To ListView1.ListItems.Count - 1
If Left(ListView1.ListItems(j).Text, 2) = "KB" Then
ListView1.ListItems.Remove (j)
End If
Next j
Filenum = FreeFile
Open "C:\software.txt" For Output As #Filenum
For j = 0 To ListView1.ListItems.Count - 1
Print #Filenum, ListView1.ListItems(j).Text
Next j
Close #Filenum
Set itemX = .ListItems.Add(, Daten(0), DisplayName)
' für 2. unnötige Spalte die mehr Informationen ausgeben würde
itemX.SubItems(1) = Daten(2)
Next I
End With
End Sub