Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Registry Wert mit VBA auslesen

Forumthread: Registry Wert mit VBA auslesen

Registry Wert mit VBA auslesen
02.07.2020 10:41:03
Justus
Hallo zusammen,
ich versuche aktuell einen Wert aus der Registry auszulesen. Genauer gesagt, möchte ich den "Friendly App Name" vom Adobe Reader auslesen, um später aus VBA zu dem entsprechenden Fenster wechseln zu können.
Dieser liegt hier:
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache\
Schlüssel: C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe.FriendlyAppName
Nachdem ich mich gefühlt durch alle Foreneinträge gewühlt habe, bin ich nun am resignieren.
Hier mein Code:
Set WSHShell = CreateObject("WScript.Shell")
AppPath = WSHShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe\")
AppName = WSHShell.RegRead("HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\Shell\MuiCache\" & AppPath & ".FriendlyAppName")
Allerdings erhalte ich dabei folgende Fehlermeldung:
Laufzeitfehler '-2147024894 (80070002)':
Ungültige Wurzel in Registrierungsschlüssel "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\Shell\MuiCache\C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe.FriendlyAppName"
Wie muss ich meinen Code verändern, um auf den entsprechenden Schlüssel zugeifen zu können?
Vielen Dank für eure Hilfe im Voraus.
Beste Grüße
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Registry Wert mit VBA auslesen
02.07.2020 10:58:01
Zwenn
Hallo Justus,
das WSHShell kannst Du einfach weglassen:

Sub RegLesen()
MsgBox RegKeyRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ _
AcroRd32.exe\")
MsgBox RegKeyRead("HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\ _
Windows\Shell\MuiCache\")
End Sub
Bei mir zeigt er allerdings nur den Pfad an. Der RegEintrag für den AppName scheint (bei mir) nicht vorhanden zu sein.
Viele Grüße,
Zwenn
Anzeige
AW: Registry Wert mit VBA auslesen
02.07.2020 12:42:27
Justus
Hi Zwenn,
danke für deine Antwort. Das löst allerdings nicht mein Problem, da es ja genau um den Wert geht, der in der Registry für das entsprechende Programm hinterlegt ist. Siehe angehängter Screenshot.
Userbild
Was ich als Wert haben will, ist ein String in dem steht: "Adobe Acrobat Reader DC"
Beste Grüße
Anzeige
Registry Wert mit VBA auslesen
02.07.2020 18:24:01
Anton
Hallo Justus,
probier's hiermit:
Code in Zwischenablage:

Option Explicit
Sub b()
  Dim HKEY_CURRENT_USER As Long, oReg As Object, arrApps    
  Dim strKeyPath, strWert, strApp, sProg As String  
  sProg = "firefox.exe" 'anpassen
  HKEY_CURRENT_USER = &H80000001
  Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")  
  strKeyPath = "Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache"
  oReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrApps
  If Not IsArray(arrApps) Then Exit Sub      
  For Each strApp In arrApps  
    If InStr(1, LCase(strApp), LCase(sProg & ".FriendlyAppName")) > 0 Then    
      oReg.GetStringValue HKEY_CURRENT_USER, strKeyPath, strApp, strWert  
      Debug.Print strApp & vbTab & strWert
    End If  
  Next
  Set oReg = Nothing  
End Sub

mfg Anton
Anzeige
@justus.boehm oT
06.07.2020 15:28:21
Anton
AW: Registry Wert mit VBA auslesen
06.07.2020 15:30:10
Justus
Hallo Anton,
Vielen Dank! Das löst mein Problem.
Beste Grüße
;
Anzeige
Anzeige

Infobox / Tutorial

Registry Werte mit VBA auslesen


Schritt-für-Schritt-Anleitung

Um den "Friendly App Name" aus der Windows-Registry mit VBA auszulesen, kannst du folgende Schritte befolgen:

  1. VBA-Editor öffnen: Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke im Menü auf Einfügen und wähle Modul.

  3. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Option Explicit
    
    Sub FriendlyAppNameAuslesen()
       Dim HKEY_CURRENT_USER As Long
       Dim oReg As Object
       Dim arrApps As Variant
       Dim strKeyPath As String
       Dim strWert As String
       Dim sProg As String
    
       sProg = "AcroRd32.exe" ' Hier den gewünschten Programmnamen anpassen
       HKEY_CURRENT_USER = &H80000001
       Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
       strKeyPath = "Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache"
       oReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrApps
    
       If Not IsArray(arrApps) Then Exit Sub
    
       For Each strApp In arrApps
           If InStr(1, LCase(strApp), LCase(sProg & ".FriendlyAppName")) > 0 Then
               oReg.GetStringValue HKEY_CURRENT_USER, strKeyPath, strApp, strWert
               Debug.Print strApp & vbTab & strWert
           End If
       Next
    
       Set oReg = Nothing
    End Sub
  4. Code ausführen: Drücke F5, um das Skript auszuführen. Die Ausgabe wird im Direktfenster angezeigt.


Häufige Fehler und Lösungen

  • Fehler: Ungültige Wurzel in Registrierungsschlüssel
    Lösung: Stelle sicher, dass der Pfad korrekt ist und dass der Schlüssel vorhanden ist. Überprüfe auch, ob du die richtigen Berechtigungen hast, um auf die Registry zuzugreifen.

  • Fehler: RegEintrag nicht vorhanden
    Lösung: Überprüfe, ob der "Friendly App Name" für die angegebene Anwendung tatsächlich in der Registry vorhanden ist. Möglicherweise ist der Eintrag nicht vorhanden oder der Programmname ist falsch.


Alternative Methoden

Falls du alternative Wege suchst, um Registry-Werte auszulesen, kannst du auch WScript.Shell verwenden. Hier ein einfaches Beispiel:

Sub RegReadExample()
    Dim WSHShell As Object
    Set WSHShell = CreateObject("WScript.Shell")

    On Error Resume Next
    MsgBox WSHShell.RegRead("HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache\C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe.FriendlyAppName")
    On Error GoTo 0
End Sub

Diese Methode ist einfach zu nutzen, bietet jedoch nicht die Flexibilität von winmgmts.


Praktische Beispiele

Ein praktisches Beispiel, um den Adobe Acrobat Key auszulesen, sieht folgendermaßen aus:

Sub AdobeAcrobatKeyAuslesen()
    Dim AppName As String
    AppName = "AcroRd32.exe.FriendlyAppName"
    ' Füge hier die vorherige Logik ein, um den Schlüssel auszulesen
End Sub

Diese Methode kannst du leicht anpassen, um andere Anwendungen auszulesen, indem du den sProg-Wert änderst.


Tipps für Profis

  • Sicherheitsvorkehrungen: Beachte, dass der Zugriff auf die Registry Administratorrechte erforden kann. Stelle sicher, dass du deine VBA-Skripte in einer sicheren Umgebung testest.
  • Debugging: Nutze Debug.Print, um Ausgaben im Direktfenster zu überprüfen. Dies hilft dir, Fehler schneller zu finden.
  • Kommentare: Kommentiere deinen Code, um die Logik für andere Benutzer klarer zu machen.

FAQ: Häufige Fragen

1. Wie kann ich den Wert einer anderen Anwendung auslesen?
Du kannst einfach den sProg-Wert im Code auf den Namen der gewünschten Anwendung ändern, z.B. "firefox.exe".

2. Welche Excel-Version wird benötigt?
Das Skript sollte in Excel 2010 und späteren Versionen funktionieren, solange VBA unterstützt wird.

3. Was ist der Unterschied zwischen WSH und winmgmts?
WSH (Windows Script Host) ist einfacher für einfache Registry-Leseoperationen, während winmgmts mehr Flexibilität und Zugriff auf verschiedene Registry-Schlüssel bietet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige