Funktion _RegReadBinary()

    • Offizieller Beitrag

    Hi,
    sicher nichts großes - aber von Zeit zu Zeit recht nützlich :D.
    Mit _RegReadBinary($KEY, $VALUE [, $Bin2Str=1]) wird ein Registryschlüssel vom Typ REG_BINARY ausgelesen und in einen String gewandelt zurückgegeben (wahlweise auch binäre Rückgabe).
    Die Syntax und Fehlermeldungen sind analog zur Funktion RegRead().

    Edit 26.12.2009:
    - Angepaßt an aktuelle AutoItversion.
    - Fehlerausgabe geändert (1 und @error-Wert)
    - Schlüssel die nicht vom Typ REG_BINARY sind werden normal gelesen

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name...._RegReadBinary($KEY, $VALUE [, $Bin2Str=1])
    ; Description......Liest einen Registryschlüssel aus
    ; Schlüssel vom Typ REG_BINARY können wahlweise als
    ; ASCII-String zurückgegeben werden.
    ; Parameter(s).....$KEY Registryschlüssel
    ; $VALUE Registrywert
    ; $Bin2Str 0 = Value wird normal gelesen
    ; 1 = Binärwert wird in ASCII-String gewandelt (Standard)
    ; Return Value(s)..Erfolg: der Registrywert
    ; Fehler: 1 set @error:
    ; 1 Schlüssel kann nicht geöffnet werden
    ; 2 Hauptschlüssel kann nicht geöffnet werden
    ; 3 Fernzugriff auf die Registry nicht möglich
    ; 4 Key oder Value nicht übergeben
    ; -1 Wert kann nicht geöffnet werden
    ; -2 Typ des Wertes wird nicht unterstützt
    ; Author(s)........BugFix ([email='bugfix@autoit.de'][/email])
    ; AutoIt ver.......3.3.2.0
    ;===============================================================================
    Func _RegReadBinary($KEY, $VALUE, $Bin2Str=1)
    If $KEY = '' Or $VALUE = '' Then Return SetError(4,0,1)
    If $Bin2Str <> 1 Then $Bin2Str = 0
    Local $reg = RegRead($KEY, $VALUE)
    Local $err = @error, $ext = @extended
    If $err Then Return SetError($err,0,1)
    If $ext <> 3 Or $Bin2Str = 0 Then Return $reg
    Local $val = ''
    $reg = StringTrimLeft($reg, 2)
    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

    [/autoit]

    DL bisher: 46

  • Hi Bugfix ;)

    den Errorteil könnte man doch nett verkürzen:

    Spoiler anzeigen
    [autoit]


    ;===============================================================================
    ;
    ; Function Name: _RegReadBinary($KEY, $VALUE)
    ; Description:: Liest einen Registryschlüssel vom Typ REG_BINARY ein und
    ; gibt diesen als String zurück.
    ; Ist der Schlüssel nicht vom Typ REG_BINARY, wird der Wert
    ; normal gelesen und zurückgegeben.
    ; Parameter(s): $KEY Registryschlüssel
    ; $VALUE Registrywert
    ; Requirement(s): #include <string.au3>
    ; Return Value(s): Erfolg: String des Registrywertes
    ; Fehler: @error
    ; @error = 0 Key oder Value nicht übergeben
    ; @error = 1 Schlüssel kann nicht geöffnet werden
    ; @error = 2 Hauptschlüssel kann nicht geöffnet werden
    ; @error = 3 Fernzugriff auf die Registry nicht möglich
    ; @error = -1 Wert kann nicht geöffnet werden
    ; @error = -2 Typ des Wertes wird nicht unterstützt
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;
    ;===============================================================================
    #include <string.au3>
    Func _RegReadBinary($KEY, $VALUE)
    If $KEY = '' Or $VALUE = '' Then Return SetError(0)
    $reg = RegRead($KEY, $VALUE)
    If @error Then Seterror(@error)
    If @extended <> 'REG_BINARY' Then Return $reg
    $val = ''
    For $i = 1 To StringLen($reg) - 2 Step 2
    $tmp = _HexToString(StringMid($reg, $i, 2))
    If $tmp <> "" Then
    $val = $val & $tmp
    EndIf
    Next
    Return $val
    EndFunc ;==>_RegReadBinary

    [/autoit]

    vielleicht hatte es auch einen Sinn, es anders zu machen ;) Aber finde es so schön kurz :P

    mfg qon

  • Also @error 0 würd ich nicht gerade nehmen. Dann hat man nichts, auf das man @error testen kann, da es bei Erfolg auch @error 0 zurückgibt

  • Hmm genau die Funktion hab ich gerade gesucht.
    Hab sie in ein Script eingebaut, aber irgendwie läuft sie nicht richtig - sie gibt den Wert immer unverändert zurück, obwohl es Binärwerte sind.

    Spoiler anzeigen
    • Offizieller Beitrag

    Tja, gab eine Änderung bei @extend von RegRead. Früher wurde der Typ als String zurückgegeben - nun als Konstante.
    Habe die Funktion angepaßt.

    Spoiler anzeigen
    [autoit]

    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

    [/autoit]