Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1836to1840
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

HKCU auslesbar, HKLM nicht

HKCU auslesbar, HKLM nicht
17.07.2021 18:55:43
W.Stecher
Hallo zusammen,
ich möchte verschiedene Werte aus der Registry auslesen und stehe vor dem Problem, dass das unter allen Einträgen bei HKEY_CURRENT_USER einwandfrei funktioniert, bei HKEY_LOCAL_MACHINE jedoch nicht.
Zur Demonstration habe ich einmal einen Code zusammengestellt ( habe ich auch als Datei hochgeladen: https://www.herber.de/bbs/user/147174.xlsm ).
Wird die Funktion Versionsnummer_auslesen ausgeführt, wird die Versionsnummer von Mozialla Firefox sowohl aus HKEY_CURRENT_USER als auch aus HKEY_LOCAL_MACHINE ausgelesen. Die stehen in meiner Registrierung an beiden Stellen. Wahrend die Versionsnummer unter HKEY_CURRENT_USER ermittelt werden kann, kann sie unter HKEY_LOCAL_MACHINE nicht ermittelt werden. Wie gesagt, dieser Code ist nur zur Demonstration. In Wirklichkeit brauche ich Werte, die nur unter HKEY_LOCAL_MACHINE stehen.
Weiß jemand, warum HKEY_CURRENT_USER funktioniert, HKEY_LOCAL_MACHINE aber nicht ?
Danke für Eure Ideen.

Option Explicit
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" ( _
ByVal hKey As Long, _
ByVal lpSubKey As String, _
phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _
ByVal hKey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
lpType As Long, _
lpData As Any, _
lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" ( _
ByVal hKey As Long) As Long
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Public Function Versionsnummer_auslesen()
Dim sValue1 As String
Dim sValue2 As String
sValue1 = RegKeyLesen(HKEY_CURRENT_USER, "SOFTWARE\Mozilla\Mozilla Firefox", "CurrentVersion")
sValue2 = RegKeyLesen(HKEY_LOCAL_MACHINE, "SOFTWARE\Mozilla\Mozilla Firefox", "CurrentVersion")
MsgBox "HKCU: " & sValue1 & vbCrLf _
& "HKLM: " & sValue2, vbInformation, "Firefox Version"
End Sub
Private Function RegKeyLesen(lngKey As Long, sPath As String, sValue As String) As String
Dim vRet As Variant
RegOpenKey lngKey, sPath, vRet
RegKeyLesen = RegKeyWertLesen(vRet, sValue)
RegCloseKey vRet
End Function
Private Function RegKeyWertLesen(ByVal lngKey As Long, ByVal sValueName As String) As String
Dim sBuffer As String
Dim lTypeValue As Long
Dim lBufferSizeData As Long
If RegQueryValueEx(lngKey, sValueName, 0, lTypeValue, ByVal 0, lBufferSizeData) = 0 Then
sBuffer = String(lBufferSizeData, Chr$(0))
If RegQueryValueEx(lngKey, sValueName, 0, 0, ByVal sBuffer, lBufferSizeData) = 0 Then
RegKeyWertLesen = Left$(sBuffer, InStr(1, sBuffer, Chr$(0)) - 1)
End If
End If
End Function

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: HKCU auslesbar, HKLM nicht
17.07.2021 19:35:08
mumpel
Hallo!
Du musst Excel als Administrator ausführen, nur dann ist Zugriff auf HKLM möglich.
Gruß, René
AW: HKCU auslesbar, HKLM nicht
17.07.2021 21:16:45
W.Stecher
Danke für den Tip, ändert aber leider nichts am Ergebnis.
Ich habe alle Excelmappen geschlossen, Excel als Administrator gestartet, was ich auch bestätigen musste, die XSLM geladen und ausgeführt.
HKCU wird ausgelsen, HKLM nicht.
AW: HKCU auslesbar, HKLM nicht
17.07.2021 22:44:16
mumpel
Bei mir keine Probleme. Da hast Du zuwenig Rechte. Hast Du auch Administratorrechte, oder nur ein Benutzerkonto ohne Administratorrechte?
AW: HKCU auslesbar, HKLM nicht
18.07.2021 07:57:35
W.Stecher
Mein Konto ist das einzige auf meinem Rechner und Windows zeigt mir das auch als Administrator an.
Darüber hinas hatte ich ja auch zusätzlich Ecxel als Administrator gestartet.
Merkwürdig ...
Anzeige
AW: HKCU auslesbar, HKLM nicht
18.07.2021 10:43:50
mumpel
Bekommst Du eine Fehlermeldung?
HKCU auslesbar, HKLM auch
18.07.2021 12:30:22
Anton
Hallo W.Stecher,
probier sowas:

Sub b()
  MsgBox ReadRegStr("HKEY_CURRENT_USER", "SOFTWARE\Mozilla\Mozilla Firefox", "CurrentVersion", 64), , "HKEY_CURRENT_USER"
  MsgBox ReadRegStr("HKEY_LOCAL_MACHINE", "SOFTWARE\Mozilla\Mozilla Firefox", "CurrentVersion", 64), , "HKEY_LOCAL_MACHINE"
End Sub  
Function ReadRegStr(RootKey As String, Key, Value, RegType)    
 'https://blog.todamax.net/2015/registry-keys-in-vba-auf-windows-7-auslesen/
  TheKey = -99
  Select Case UCase(RootKey)  
    Case "HKEY_CLASSES_ROOT": TheKey = &H80000000
    Case "HKEY_CURRENT_USER": TheKey = &H80000001
    Case "HKEY_LOCAL_MACHINE": TheKey = &H80000002
    Case "HKEY_USERS": TheKey = &H80000003
    Case "HKEY_CURRENT_CONFIG": TheKey = &H80000004
    Case "HKEY_DYN_DATA": TheKey = &H80000005
  End Select  
 
  If TheKey = -99 Then  
    Exit Function  
  End If  
 
  Dim oCtx, oLocator, oReg, oInParams, oOutParams  
 
  Set oCtx = CreateObject("WbemScripting.SWbemNamedValueSet")  
  oCtx.Add "__ProviderArchitecture", RegType
 
  Set oLocator = CreateObject("Wbemscripting.SWbemLocator")  
  Set oReg = oLocator.ConnectServer("", "root\default", "", "", , , , oCtx).Get("StdRegProv")  
 
  Set oInParams = oReg.Methods_("GetStringValue").InParameters    
  oInParams.hDefKey = TheKey
  oInParams.sSubKeyName = Key  
  oInParams.sValueName = Value
 
  Set oOutParams = oReg.ExecMethod_("GetStringValue", oInParams, , oCtx)    
 
  ReadRegStr = oOutParams.sValue
End Function  

mfg Anton
Anzeige
AW: HKCU auslesbar, HKLM auch
18.07.2021 19:37:06
mumpel
Hi Anton!
Wie hast Du Dein Codefenster erstellt? Das darin enthaltene Fieldset enthält einen kleinen Schönheitsfehler. "onclick" verhindert das Markieren einzelner Codezeilen. Daher solltest Du es mal mit "onDblClick" versuchen, falls es dieses Argument im Fieldset gibt, damit wird der Code erst nach Doppelklick kopiert und man kann einzelne Zeilen markieren und normal kopieren. Mal davon abgesehen ist es fraglich ob der programmatische Zugriff auf die Zwischenablage empfehlenswert ist.
Gruß, René
AW: HKCU auslesbar, HKLM auch
18.07.2021 20:53:33
Anton
Hallo René,
"onclick" verhindert das Markieren einzelner Codezeilen.
Wofür brauchst du die einzelne Codezeilen?
ist es fraglich ob der programmatische Zugriff auf die Zwischenablage empfehlenswert ist.
Was ist daran nicht empfehlenswert?
mfg Anton
Anzeige
AW: HKCU auslesbar, HKLM auch
18.07.2021 22:30:22
mumpel
>>
Vielleicht braucht das ja jemand (weil sie ihm/ihr gefallen).
>>
Es gibt immer Skeptiker.... 😉
AW: HKCU auslesbar, HKLM auch
18.07.2021 21:28:51
W.Stecher
Hallo Anton,
ich war den ganzen tag beschätgit, daher erst jetzt:
Ich habe den Code mal schnell kopiert und ausprobiert: er funktioniert.
Ich werde ihn mir morgen mal genau ansehen, denn aktuell erkenne ich nocht nicht, woran es genau liegt, dass Deiner funktioniert und meiner nicht.
DANKE !
Gruß
W.Stecher

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige