Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1348to1352
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Hilfe - Software auslesen

Hilfe - Software auslesen
01.03.2014 16:43:56
nexno
Hallo,
Ich würde gerne die installierte Software auf dem jeweiligen PC auselesen.
WMI ist in meinem Fall keine Option, daher mit der Registry.
Allerdings nicht nur aus einem Registry Schlüssel, sondern aus dreien:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
Mein Ansatz war folgender, dieser funktioniert aber nicht richtig.
Sub InstallierteProgrammeEinlesen()
'Alle Eintragungen löschen
'Worksheets("Installierte Programme").Select
Range("B6:B1000").ClearContents
'Auf PC installierte Programme einlesen
Const HKLM = &H80000002
Const HKCU = &H80000001
Const Key1 = "Software\Microsoft\Windows\CurrentVersion\Uninstall\"
Const Key2 = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
Dim start, start2 As String
Set objReg = GetObject("winmgmts://./root/default:StdRegProv")
objReg.EnumKey HKLM, Key1, arrSubKeys
For Each strSubKey In arrSubKeys
intRet = objReg.GetStringValue(HKLM, Key1 & strSubKey, "DisplayName", strValue)
If (strValue  "") And (intRet = 0) Then
Cells(i + 5, 2) = strValue
Debug.Print i & vbTab & strValue
i = i + 1
End If
Next
start = i + 4
i = 0
For Each strSubKey In arrSubKeys
intRet = objReg.GetStringValue(HKCU, Key1 & strSubKey, "DisplayName", strValue)
If (strValue  "") And (intRet = 0) Then
Cells(x + start, 2) = strValue
Debug.Print x & vbTab & strValue
x = x + 1
End If
Next
start2 = x
For Each strSubKey In arrSubKeys
intRet = objReg.GetStringValue(HKLM, Key2 & strSubKey, "DisplayName", strValue)
If (strValue  "") And (intRet = 0) Then
Cells(x + start2, 2) = strValue
Debug.Print x & vbTab & strValue
y = y + 1
End If
Next
'Auf PC installierte Programme alphabetisch sortieren
Range("B6:B1000").Sort Key1:=Range("B6"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("a1").Select
End Sub
Kann mir jemand sagen wieso, und eventuell den Code berichtigen, das wäre sehr hilfreich.
Danke im vorraus =)
Lg
Nexno

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hilfe - Erklärungsbedürftig...
01.03.2014 17:18:02
EtoPHG
Hallo Nexno,
Zitat:dieser funktioniert aber nicht richtig. ist ja wieder einmal ne richtig gute Erklärung, nach was man den suchen soll! :-(
Gruess Hansueli

AW: Hilfe - Erklärungsbedürftig...
01.03.2014 19:28:57
nexno
Also:
Wenn ich den Code per Button-Click ausführen lasse, dann werden mir zwar Programme aufgelistet, allerdings nicht alle.
Ich frage mich nun ob entweder die bereits aufgelisteten Programme überschrieben wurden oder ob sie einfach nicht alle aufgelistet werden.
Ziel ist eine Auflistung !aller! installierten Programme zu bekommen, über die Registry, nicht über WMI.
Und soweit ich informiert bin müssen dazu drei Schlüssel ausgelesen werden:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
Falls dies nicht stimmt, korrigiert mich bitte.
Was ich benötige ist ein Code der mir alle Programme auflistet. Und zwar aus allen 3 Registrykeys, jeweils die Werte mit dem Namen "DisplayName". Diese enthalten den Namen des Programs.

Anzeige
AW: Hilfe - Erklärungsbedürftig...
01.03.2014 20:16:48
Raphael
Hallo Nexno,
also wenn ich das richtig sehe, dann funktioniert dein Code einwandfrei. Bei mir listet er alle installierten Programme welche sich auch in der Registry eintragen korrekt auf. Aber das könnte auch das Problem sein, nicht jedes installierte oder vermeintlich installierte Programm trägt sich in der Registry ein.
Schau mal welches das fehlen, allenfalls sind einfach aufgelöste ZipDateien welche noch eine .exe beinhalteten oder ähnliches.
Gruess
Raphael

AW: Hilfe - Erklärungsbedürftig...
01.03.2014 20:20:42
nexno
Beim ersten Loop kommen bei mir auch Ergebnisse, werden aber bei dir auch die anderen Schleifen durchlaufen und die Einträge hinzugefügt?

Anzeige
Ich denke gelöst...
01.03.2014 22:53:57
Raphael
Nochmals Hallo,
ich habe deinen Code nun ein bisschen genauer unter die Lupe genommen....
Also als Grundsatztipp würde ich dir empfehlen mit "Option Explicit" zu arbeiten. Ich habe dir nur den fehlenden Teil entsprechend reinkopiert, die Dinger mit den vielen "!!!!!!!!!!!!!!!!". Geändert habe ich nichts.
Sub InstallierteProgrammeEinlesen()
'Alle Eintragungen löschen
'Worksheets("Installierte Programme").Select
Range("B6:B1000").ClearContents
'Auf PC installierte Programme einlesen
Const HKLM = &H80000002
Const HKCU = &H80000001
Const Key1 = "Software\Microsoft\Windows\CurrentVersion\Uninstall\"
Const Key2 = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
Dim start, start2 As String
Set objReg = GetObject("winmgmts://./root/default:StdRegProv")
objReg.EnumKey HKLM, Key1, arrSubKeys '!!!!!!!!!!!!!!!!!
For Each strSubKey In arrSubKeys
intRet = objReg.GetStringValue(HKLM, Key1 & strSubKey, "DisplayName", strValue)
If (strValue  "") And (intRet = 0) Then
Cells(i + 5, 2) = strValue
Debug.Print i & vbTab & strValue
i = i + 1
End If
Next
start = i + 4
i = 0
objReg.EnumKey HKCU, Key1, arrSubKeys '!!!!!!!!!!!!!
For Each strSubKey In arrSubKeys
intRet1 = objReg.GetStringValue(HKCU, Key1 & strSubKey, "DisplayName", strValue)
If (strValue  "") And (intRet = 0) Then
Cells(x + start, 2) = strValue
Debug.Print x & vbTab & strValue
x = x + 1
End If
Next
start2 = x
objReg.EnumKey HKLM, Key2, arrSubKeys '!!!!!!!!!!!!!!!!!!
For Each strSubKey In arrSubKeys
intRet2 = objReg.GetStringValue(HKLM, Key2 & strSubKey, "DisplayName", strValue)
If (strValue  "") And (intRet = 0) Then
Cells(x + start2, 2) = strValue
Debug.Print x & vbTab & strValue
y = y + 1
End If
Next
'Auf PC installierte Programme alphabetisch sortieren
Range("B6:B1000").Sort Key1:=Range("B6"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("a1").Select
End Sub

Gruess Raphael

Anzeige
Ach ja, und das...
01.03.2014 22:56:06
Raphael
.sort würde ich mir nochmals ansehen.
Die Einträge beginnen bei B5 aber das sortieren ab B6...

AW: Ach ja, und das...
02.03.2014 10:35:44
Hajo_Zi
sortieren ab B5 Überschrift ja.

AW: Hilfe - Erklärungsbedürftig...
02.03.2014 19:03:30
nexno
Danke für eure Antworten aber irgendwie werden immer noch nicht alle Programme angezeigt :/
Die Schlüssel sind aber richtig, oder?
Odre habe ich welche vergessen?
Die Systemsteuerung zeigt mirja auch alle Programme an, aus welchen Schlüsseln ließt diese den die Programme aus?

AW: Hilfe - Erklärungsbedürftig...
02.03.2014 20:37:21
Raphael
Hallo Nexno,
in dem Artikel siehst du in etwa das Selbe was ich oben schon mal gesagt habe, nicht alle Programme tragen sich in die Registry ein.
http://stackoverflow.com/questions/429738/detecting-installed-programs-via-registry
Du wirst also auf diesem Weg nie 100% erreichen.
Gruess
Raphael

Anzeige
AW: Hilfe - Erklärungsbedürftig...
03.03.2014 01:19:14
nexno
Wie ließt denn die Systemsteuerung alle Programme aus?

AW: Hilfe - Erklärungsbedürftig...
03.03.2014 17:47:12
Raphael
Ich habe keine Ahnung und ich kenne auch kein einschlägiges Forum welches dir diese Frage beantworten kann. Versuchs mal in einem Forum welches C++ Programmierer nutzen, allenfalls findest du dort jemanden der dir Auskunft geben kann.
Gruess
Raphael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige