Um in Ihrer Anwendung zu ermitteln, welche Software auf dem System alles installiert ist, kann man die Windows-Registry auslesen - und zwar den Bereich, in dem die Aufrufe für die einzelnen Deinstallationsprogramme gespeichert sind. Die Einträge der deinstallierbaren Software sind hierbei im Abschnitt HKEY_LOCAL_MACHINE\Software\MicrosoftWindows\CurrentVersion\Uninstall gespeichert. Also müssen Sie diesen Abschnitt "auslesen", und zwar am einfachsten mit Hilfe des Tipps ' Liste der deinstallierbaren Software Private Sub ListeRefresh() 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 RegKey = "Software\Microsoft\Windows\" & _ "CurrentVersion\Uninstall" With ListView1 .ListItems.Clear ' vb@rchiv-Tipp ' Durchsuchen der Registry wird benötigt! ' 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 = False .FindValueNames = True .FindValues = False 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 Set itemX = .ListItems.Add(, Daten(0), DisplayName) itemX.SubItems(1) = Daten(2) Next I End With End Sub In unserem Beispiel möchten wir eine Liste aller deinstallierbaren Anwendungen ermitteln, mit folgenden zwei Möglichkeiten:
Plazieren wir also noch zwei Commandbuttons unterhalb des ListView-Elements: cmdDeinstall und cmdDelete Deinstaller aufrufen ' Anwendung deinstallieren Private Sub cmdDeinstall_Click() Dim CmdLine As String Dim Index As Integer If MsgBox("Es wird jetzt das Deinstallations-" & _ "Programm gestartet!", 65, "Deinstallieren") = vbOK Then ' Deinstallation aufrufen With ListView1 CmdLine = .SelectedItem.SubItems(1) If AppStartAndWait(CmdLine, vbNormalFocus) Then ' Liste aktualisieren Index = .SelectedItem.Index ListeRefresh ' nächsten Eintrag markieren If Index > .ListItems.Count Then _ Index = .ListItems.Count If Index > 0 Then Set .SelectedItem = .ListItems(Index) .SelectedItem.EnsureVisible End If Else ' Fehler aufgetreten MsgBox "Fehler beim Starten des Deinstallers", _ 16, "Deinstallieren" End If End With End If End Sub Wenn Sie sich den Code aufmerksam angeschaut haben, dann haben Sie sicherlich auch bemerkt, daß hier eine Funktion verwendet wird, die es in VB doch gar nicht gibt: Eintrag aus der Registry löschen Private Declare Function RegDeleteKey Lib "advapi32.dll" _ Alias "RegDeleteKeyA" ( _ ByVal hKey As Long, _ ByVal lpSubKey As String) As Long ' Eintrag aus Registrierdatenbank löschen Private Sub cmdDelete_Click() Dim lRet As Long Dim SubKey As String Dim Index As Integer If MsgBox("Aktuellen Eintrag wirklich aus der " & _ "Registry löschen?", 292, "Löschen") = vbYes Then With ListView1 SubKey = .SelectedItem.Key lRet = RegDeleteKey(MainKey.HKEY_LOCAL_MACHINE, _ SubKey) If lRet = 0 Then ' Liste aktualisieren Index = .SelectedItem.Index ListeRefresh ' nächsten Eintrag markieren If Index > .ListItems.Count Then _ Index = .ListItems.Count If Index > 0 Then Set .SelectedItem = .ListItems(Index) .SelectedItem.EnsureVisible End If Else ' Fehler aufgetreten MsgBox "Fehler beim Löschen des Eintrags!", _ 16, "Löschen" End If End With End If End Sub Dieser Tipp wurde bereits 21.168 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevWizard für VB5/6 ![]() Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Tipp des Monats ![]() Dieter Otter sevTabStrip: Rechtsklick auf Reiter erkennen Eine Funktion, mit der sich prüfen lässt, auf welchen Tab-Reiter ein Mausklick erfolgte TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |