Registry-Zugriff?

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von Pidgin.

    Okay, wie gesagt, ich habe es gerade "freihand" gemacht. Deins blace funktioniert. Ich habe meine Gedanken gerade mal überprüft. Tja, ich bin mal wieder auf dumme gedanken gekommen. :D
    Mit freundlichsten Grüßen

    Leon36910


    Bombensichere Testversion: 12%

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Leon36910“ () aus folgendem Grund: Falscher Ausdruck

    leon36910 schrieb:

    Okay, wie gesagt, ich habe es gerade "freihand" gemacht. Das funktioniert. Ich habe meine Gedanken gerade mal überprüft. Tja, ich bin mal wieder auf dumme gedanken gekommen.


    Das hatte ich vorher da stehen. Bitte nichts falsches denken. Ich meinte das so:
    Okay, wie gesagt, ich habe es gerade "freihand" gemacht. Deins ~blaze~ funktioniert. Ich habe meine Gedanken gerade mal überprüft. Tja, ich bin mal wieder auf dumme gedanken gekommen.
    Mit freundlichsten Grüßen

    Leon36910


    Bombensichere Testversion: 12%
    Noch mal ne Unsauberkeit behoben.
    Die 0 fehlt, da der Wert < 16 ist. Das könnte man z.B. so lösen:

    VB.NET-Quellcode

    1. Private Shared Function ByteArrayAsString(ByVal bytes() As Byte) As String
    2. If bytes.Length > 0 Then
    3. 'Fuege einfach alle Bytes in Hexadezimaldarstellung und ein Leerzeichen
    4. Dim sb As New System.Text.StringBuilder(bytes.Length * 3)
    5. For Each bt As Byte In bytes
    6. If bt < 16 Then sb.Append("0"c)
    7. sb.Append(Convert.ToString(bt, 16)).Append(" "c)
    8. Next
    9. Return sb.ToString(0, sb.Length - 1)
    10. Else
    11. Return String.Empty
    12. End If
    13. End Function

    Vllt. sollte ich nächstes mal eher bei der Sache sein.
    Normalerweise notiert man eine Zahl nicht mit einer führenden 0, da sie keinen Einfluss auf die Zahl selbst hat. So auch bei Hexadezimalzahlen.

    Gruß
    ~blaze~
    Spoiler anzeigen

    ~blaze~ schrieb:

    VB.NET-Quellcode

    1. Private Shared Sub Test()
    2. 'Schluessel oeffnen
    3. Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\VBExpress\10.0")
    4. If key IsNot Nothing Then 'falls vorhanden
    5. 'Wert mit Namen EditCfgData ermitteln, warum auch immer
    6. Dim value As Object = key.GetValue("EditCfgData")
    7. 'wenn der Wert ein Byte-Array ist
    8. If TypeOf value Is Byte() Then
    9. 'mach String drauss und gib aus
    10. MessageBox.Show(ByteArrayAsString(DirectCast(value, Byte())))
    11. Else
    12. MessageBox.Show("War kein Byte-Array.", "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    13. End If
    14. Else
    15. MessageBox.Show("Kein VB10 installiert.", "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    16. End If
    17. End Sub
    18. Private Shared Function ByteArrayAsString(ByVal bytes() As Byte) As String
    19. If bytes.Length > 0 Then
    20. 'Fuege einfach alle Bytes in Hexadezimaldarstellung und ein Leerzeichen
    21. Dim sb As New System.Text.StringBuilder(bytes.Length * 3)
    22. For Each bt As Byte In bytes
    23. sb.Append(Convert.ToString(bt, 16)).Append(" "c)
    24. Next
    25. Return sb.ToString(0, sb.Length - 1)
    26. Else
    27. Return String.Empty
    28. End If
    29. End Function

    So zum Beispiel. Die Konvertierung kannst du ja dann noch anpassen.

    Ahja, versuch auch zu verstehen, was wie wo passiert.

    Gruß
    ~blaze~

    ~blaze~ schrieb:

    VB.NET-Quellcode

    1. Private Shared Sub Test()
    2. 'Schluessel oeffnen
    3. Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\VBExpress\10.0")
    4. If key IsNot Nothing Then 'falls vorhanden
    5. 'Wert mit Namen EditCfgData ermitteln, warum auch immer
    6. Dim value As Object = key.GetValue("EditCfgData")
    7. 'wenn der Wert ein Byte-Array ist
    8. If TypeOf value Is Byte() Then
    9. 'mach String drauss und gib aus
    10. MessageBox.Show(ByteArrayAsString(DirectCast(value, Byte())))
    11. Else
    12. MessageBox.Show("War kein Byte-Array.", "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    13. End If
    14. Else
    15. MessageBox.Show("Kein VB10 installiert.", "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    16. End If
    17. End Sub
    18. Private Shared Function ByteArrayAsString(ByVal bytes() As Byte) As String
    19. If bytes.Length > 0 Then
    20. 'Fuege einfach alle Bytes in Hexadezimaldarstellung und ein Leerzeichen
    21. Dim sb As New System.Text.StringBuilder(bytes.Length * 3)
    22. For Each bt As Byte In bytes
    23. sb.Append(Convert.ToString(bt, 16)).Append(" "c)
    24. Next
    25. Return sb.ToString(0, sb.Length - 1)
    26. Else
    27. Return String.Empty
    28. End If
    29. End Function

    So zum Beispiel. Die Konvertierung kannst du ja dann noch anpassen.

    Ahja, versuch auch zu verstehen, was wie wo passiert.

    Gruß
    ~blaze~


    Könntest du mir das nochmal an hand von String to ByteArray erklären?
    Eine Alternative zur Methode von @~blaze~: wäre z. B.:

    VB.NET-Quellcode

    1. Dim bytes() as Byte = {1,2,3,4,5,6,7,8,9,10,11,12,13,14}
    2. Dim byteString as String = BitConverter.ToString(bytes).Replace("-", " ")
    msdn.microsoft.com/en-us/library/3a733s97.aspx
    Von meinem iPhone gesendet
    Am einfachsten ginge das per

    VB.NET-Quellcode

    1. Private Shared Function StringToByteArray(ByVal value As String) As Byte()
    2. Dim str() As String = value.Split(New Char() {" "c, Chr(10), Chr(13)}, StringSplitOptions.RemoveEmptyEntries)
    3. Dim cb(str.Length - 1) As Byte
    4. For i As Integer = 0 To cb.Length - 1
    5. cb(i) = Byte.Parse(str(i), Globalization.NumberStyles.HexNumber)
    6. Next
    7. Return cb
    8. End Function

    oder Ähnlichem. Gültige Trennzeichen sind Leerzeichen, Zeilenumsprung und Wagenrücklauf. D.h. Tab etc. sind nicht drin.

    Gruß
    ~blaze~

    ~blaze~ schrieb:

    Am einfachsten ginge das per

    VB.NET-Quellcode

    1. Private Shared Function StringToByteArray(ByVal value As String) As Byte()
    2. Dim str() As String = value.Split(New Char() {" "c, Chr(10), Chr(13)}, StringSplitOptions.RemoveEmptyEntries)
    3. Dim cb(str.Length - 1) As Byte
    4. For i As Integer = 0 To cb.Length - 1
    5. cb(i) = Byte.Parse(str(i), Globalization.NumberStyles.HexNumber)
    6. Next
    7. Return cb
    8. End Function

    oder Ähnlichem. Gültige Trennzeichen sind Leerzeichen, Zeilenumsprung und Wagenrücklauf. D.h. Tab etc. sind nicht drin.

    Gruß
    ~blaze~



    System.FormatException wurde nicht behandelt.
    Message=Die Eingabezeichenfolge hat das falsche Format.
    Source=mscorlib



    Bekomme ich bei

    VB.NET-Quellcode

    1. key.SetValue("key", StringToByteArray("89 8C C7 E0 61 35 9E 2A FD 7C AP 06 AZ FB EQ"))


    zurück.

    EDIT: Hab's lag am 'Q'. Dankeschön.