Servus,
Habe ein ListView das mir die installierte Software des PCs ausgibt.
Hin und wieder treten doppelte Einträge auf. Wie kann ich diese löschen bzw. ignorieren in meinem Fall
Ein Ansatz von mir in rot:
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
.Sorted = True
.SortKey = 0
.SortOrder = lvwAscending
' Alle Einträge im Schlüssel
' Software\Microsoft\Windows\CurrentVersion\Uninstall ermitteln
With SO
.HowToSearch = StringExists
.SearchMainKey = HKEY_LOCAL_MACHINE
.SearchString = "DisplayName"
.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 definieren
Folder = Mid$(Daten(0), InStrRev(Daten(0), "\") + 1)
DisplayName = Get_ValueString(HKEY_LOCAL_MACHINE, _
RegKey & Folder, "DisplayName")
If DisplayName = "" Then DisplayName = Folder
' ListView1 Daten in ein .txt schreiben
Dim Filenum As Integer
Dim j As Integer
' Doppelte Einträge ignorieren
Dim neuerEintrag As String
Dim doppelt As Boolean
Dim d As Long
neuerEintrag = "Eintrag"
doppelt = False
For d = 0 To ListView1.ListItems.Count
If ListView1.ListItems(d) = neuerEintrag Then doppelt = True
Next d
If doppelt = False Then ListView1.ListItems.Add (neuerEintrag)
' Ausgelesene Daten in ein .txt File schreiben
Filenum = FreeFile
Open "C:\" & GetDomain & "_software.txt" For Output As #Filenum
For j = 0 To ListView1.ListItems.Count
Print #Filenum, ListView1.ListItems(j).Text
Next j
Close #Filenum
Set itemX = .ListItems.Add(, Daten(0), DisplayName)
itemX.SubItems(1) = Daten(2)
Next i
End With
End Sub
DANKE für jede Hilfe!
Gruß alex
Habe ein ListView das mir die installierte Software des PCs ausgibt.
Hin und wieder treten doppelte Einträge auf. Wie kann ich diese löschen bzw. ignorieren in meinem Fall
Ein Ansatz von mir in rot:
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
.Sorted = True
.SortKey = 0
.SortOrder = lvwAscending
' Alle Einträge im Schlüssel
' Software\Microsoft\Windows\CurrentVersion\Uninstall ermitteln
With SO
.HowToSearch = StringExists
.SearchMainKey = HKEY_LOCAL_MACHINE
.SearchString = "DisplayName"
.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 definieren
Folder = Mid$(Daten(0), InStrRev(Daten(0), "\") + 1)
DisplayName = Get_ValueString(HKEY_LOCAL_MACHINE, _
RegKey & Folder, "DisplayName")
If DisplayName = "" Then DisplayName = Folder
' ListView1 Daten in ein .txt schreiben
Dim Filenum As Integer
Dim j As Integer
' Doppelte Einträge ignorieren
Dim neuerEintrag As String
Dim doppelt As Boolean
Dim d As Long
neuerEintrag = "Eintrag"
doppelt = False
For d = 0 To ListView1.ListItems.Count
If ListView1.ListItems(d) = neuerEintrag Then doppelt = True
Next d
If doppelt = False Then ListView1.ListItems.Add (neuerEintrag)
' Ausgelesene Daten in ein .txt File schreiben
Filenum = FreeFile
Open "C:\" & GetDomain & "_software.txt" For Output As #Filenum
For j = 0 To ListView1.ListItems.Count
Print #Filenum, ListView1.ListItems(j).Text
Next j
Close #Filenum
Set itemX = .ListItems.Add(, Daten(0), DisplayName)
itemX.SubItems(1) = Daten(2)
Next i
End With
End Sub
DANKE für jede Hilfe!
Gruß alex