Hallo Leute,
was mache ich falsch? Wenn ich die Funktion "_GetRegValues($HKEY)" von BugFix "Registry-Funktionen per Objekt " nutze erhalte ich bei den meisten Einträgen keinen Wert. Hier der zusammengestrickter Code:
Spoiler anzeigen
#include<Array.au3>
Local $regpath = 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Common\Smart Tag'
;~ Local $regpath = 'HKEY_CURRENT_USER\Software\AutoIt v3\Au3Info'
; Versuch 1
Local $ar = _GetRegValues($regpath) ; Ermittelt alle Namen, Typen und Werte in einem gegebenen Schlüssel
If IsArray($ar) Then
_ArrayDisplay($ar, 'Values von ' & $regpath)
Else
MsgBox(0, '', 'Fehler')
EndIf
; bringt fast keine Werte unter Col2
; --> was mache ich falsch?
; Versuch 2
$REV = RegEnumVal($regpath, 1)
$RR = RegRead($regpath, $REV)
If @error Then
ConsoleWrite('Fehler: ' & @error & @LF)
Else
ConsoleWrite($REV & ':' & $RR & @LF)
EndIf
; bringt nur den dezimalen Wert
; --> wie erhalte ich den hexadezimalen Wert?
; --> aus der Hilfe werde ich in diesem Fall nicht schlau
; Versuch 3
$REV = RegEnumVal($regpath, 1)
$RRB = _RegReadBinary($regpath, $REV)
If @error Then
ConsoleWrite('Fehler: ' & @error & @LF)
Else
ConsoleWrite($REV & ':' & $RRB & @LF)
EndIf
; den Wert kann ich garnicht deuten
; --> auch hier möchte ich den hexadezimalen Wert wie ihn der Regiestrierungs-Editor ausgibt
;========================================================================================
; Function Name: _GetRegSubKeys($HKEY)
; Description: Ermittelt die Unterschlüssel für den übergebenen Schlüssel
; Parameter(s): $HKEY der Registryschlüssel
; Return Value(s): Erfolg Array mit den Unterschlüsseln
; Fehler Leerstring (keine Unterschlüssel vorhanden oder Schlüssel existiert nicht)
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;========================================================================================
Func _GetRegSubKeys($HKEY)
If StringInStr($HKEY, '\') Then
If StringRight($HKEY, 1) = '\' Then
$HKEY = StringTrimRight($HKEY, 1)
Local $strKeyPath = ''
Else
Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
$HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
EndIf
Else
Local $strKeyPath = ''
EndIf
Select
Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
$HKEY = 0x80000002
Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
$HKEY = 0x80000003
Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
$HKEY = 0x80000001
Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
$HKEY = 0x80000000
Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
$HKEY = 0x80000005
EndSelect
Local $arrSubKeys = '', $subkey
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
$oReg.EnumKey ($HKEY, $strKeyPath, $arrSubKeys)
Return $arrSubKeys
EndFunc ;==>_GetRegSubKeys
;========================================================================================
; Function Name: _GetRegRights($HKEY)
; Description: Ermittelt die Rechte des Abfragenden für den übergebenen Schlüssel
; Parameter(s): $HKEY der zu prüfende Registryschlüssel
; Return Value(s): String mit Auflistung der Rechte:
; Q Key Query Value
; S Key Set Value
; C Key Create Sub Key
; D Delete
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;========================================================================================
Func _GetRegRights($HKEY)
Local $bHasAccessRight, $sRights = ''
If StringInStr($HKEY, '\') Then
If StringRight($HKEY, 1) = '\' Then
$HKEY = StringTrimRight($HKEY, 1)
Local $strKeyPath = ''
Else
Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
$HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
EndIf
Else
Local $strKeyPath = ''
EndIf
Select
Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
$HKEY = 0x80000002
Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
$HKEY = 0x80000003
Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
$HKEY = 0x80000001
Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
$HKEY = 0x80000000
Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
$HKEY = 0x80000005
EndSelect
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
$oReg.CheckAccess($HKEY, $strKeyPath, 0x0001, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'Q'
$oReg.CheckAccess($HKEY, $strKeyPath, 0x0002, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'S'
$oReg.CheckAccess($HKEY, $strKeyPath, 0x0004, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'C'
$oReg.CheckAccess($HKEY, $strKeyPath, 0x00010000, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'D'
Return $sRights
EndFunc ;==>_GetRegRights
;========================================================================================
; Function Name: _GetRegValues($HKEY)
; Description: Ermittelt alle Namen, Typen und Werte in einem gegebenen Schlüssel
; Parameter(s): $HKEY der Registryschlüssel
; Return Value(s): Erfolg Array[i][0] = Name
; Array[i][1] = Typ
; Array[i][2] = Wert
; Fehler Leerstring (Schlüssel existiert nicht oder ist ohne Einträge)
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;========================================================================================
Func _GetRegValues($HKEY)
Local $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
If StringInStr($HKEY, '\') Then
If StringRight($HKEY, 1) = '\' Then
$HKEY = StringTrimRight($HKEY, 1)
Local $strKeyPath = ''
Else
Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
$HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
EndIf
Else
Local $strKeyPath = ''
EndIf
Select
Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
$HKEY = 0x80000002
Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
$HKEY = 0x80000003
Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
$HKEY = 0x80000001
Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
$HKEY = 0x80000000
Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
$HKEY = 0x80000005
EndSelect
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
Local $arrValueNames, $arrValueTypes, $strValue
$oReg.EnumValues($HKEY, $strKeyPath, $arrValueNames, $arrValueTypes)
$OEvent = ObjEvent($oReg, "EnumValues")
If Not IsArray($arrValueNames) Then Return ''
Local $arOut[UBound($arrValueNames)][3]
For $i = 0 To UBound($arrValueNames) -1
$arOut[$i][0] = $arrValueNames[$i]
Switch $arrValueTypes[$i]
Case 1
$arOut[$i][1] = 'REG_SZ'
$oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 2
$arOut[$i][1] = 'REG_EXPAND_SZ'
$oReg.GetExpandedStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 3
$arOut[$i][1] = 'REG_BINARY'
$oReg.GetBinaryValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 4
$arOut[$i][1] = 'REG_DWORD'
$oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 7
$arOut[$i][1] = 'REG_MULTI_SZ'
$oReg.GetMultiStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
EndSwitch
$arOut[$i][2] = $strValue
Next
Return $arOut
EndFunc ;==>_GetRegValues
Func MyErrFunc()
Return
Endfunc
Func _RegReadBinary($KEY, $VALUE)
If $KEY = '' Or $VALUE = '' Then Return SetError(4,0,1)
Local $reg = RegRead($KEY, $VALUE)
Local $err = @error, $ext = @extended
If $err Then Return SetError($err,0,1)
If $ext <> 3 Then Return $reg
Local $val = ''
For $i = 1 To StringLen($reg) - 2 Step 2
$tmp = BinaryToString('0x' & StringMid($reg, $i, 2))
If $tmp <> "" Then
$val = $val & $tmp
EndIf
Next
Return $val
EndFunc ;==>_RegReadBinary
Des weiteren habe ich mit den Standard-Functionen versucht weiter zu kommen, jedoch habe ich es bis jetzt nicht geschaft den hexadezimalen Wert zu erhalten. Auch mit der Function _RegReadBinary($KEY, $VALUE)von BugFix bin ich nicht weitergekommen. Zur Konntrolle, wass ich erwarte habe ich einen Export aus dem Registrierungs-Editor ausgeführt. Der Export sieht so aus:
Spoiler anzeigen
[HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Smart Tag]
"migratedBitValues"=hex:01,00,00,00
Spoiler anzeigen
[HKEY_CURRENT_USER\Software\AutoIt v3\AU3Info]
"WinX"=dword:00000200
"WinY"=dword:00000000
"WinW"=dword:00000200
"WinH"=dword:00000258
"ColorMode"=dword:00000001
"CoordMode"=dword:00000001
"HighlightControls"=dword:00000000
"Magnify"=dword:00000000
"AlwaysOnTop"=dword:00000001
"HighlightColor"=dword:00000000
"LastTab"=dword:00000006