Registry Auslesen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von nawiat.

    Registry Auslesen

    Hallo ^^

    Ich habe dienen Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Using rk As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion")
    2. For Each skName As String In rk.GetSubKeyNames()
    3. Using sk As RegistryKey = rk.OpenSubKey(skName)
    4. If skName.Contains("Mozilla Firefox") And skName.Contains("ESR") Then
    5. If sk.GetValue("DisplayIcon") Is Nothing Then
    6. Return "Fehler"
    7. Else
    8. Return sk.GetValue("DisplayIcon")
    9. End If
    10. Else
    11. If skName.Contains("Mozilla Firefox") And Not skName.Contains("ESR") Then
    12. If sk.GetValue("DisplayIcon") Is Nothing Then
    13. Return "Fehler"
    14. Else
    15. Return sk.GetValue("DisplayIcon")
    16. End If
    17. Else
    18. Return "Fehler"
    19. End If
    20. End If
    21. End Using
    22. Next
    23. End Using


    Damit möchte ich in dem Pfad
    "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
    den Zweig der
    "Mozilla Firefox" und "ESR"
    beinhaltet öffnen und mir den Key DisplayIcon auslesen lassen.

    Sieht da jemand das Problem ?


    Grüße

    Peter

    nawiat schrieb:

    Problem
    Die Logik ist unabhängig von "ESR".
    Mach es so:

    VB.NET-Quellcode

    1. Private Function CheckRegistry() As String
    2. Using rk As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion")
    3. For Each skName As String In rk.GetSubKeyNames()
    4. Using sk As RegistryKey = rk.OpenSubKey(skName)
    5. If skName.Contains("Mozilla Firefox") Then
    6. If sk.GetValue("DisplayIcon") IsNot Nothing Then
    7. Return sk.GetValue("DisplayIcon").ToString
    8. End If
    9. End If
    10. End Using
    11. Next
    12. End Using
    13. Return "Fehler"
    14. End Function
    Und mach Option strict On.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    nawiat schrieb:

    "Option strict On"
    zwingt Dich dazu, die Datentypen sorgfältig zu verwenden.
    So sind ohne Option Strict On folgende Konstrukte möglich:

    VB.NET-Quellcode

    1. Dim txt1 As String = 15
    2. Dim txt2 As String = DateTime.Now
    3. Dim value As Integer = "15"
    Mit Option Strict On sähe das so aus:

    VB.NET-Quellcode

    1. Dim txt1 As String = "15"
    2. Dim txt2 As String = DateTime.Now.ToString
    3. Dim value As Integer = 15
    Du kannst in jeder Quellcode-Datei in die oberste Zeile
    Option Strict On reinschreiben, das wäre aber suboptimal, es sei denn, Du konvertierst ein Projekt klassenweise.
    Du kannst Deinem Projekt Option Strict On in den Projekteigenschaften vorgeben:
    Projekt => Eigenschaften => Kompilieren => Option Strict On
    Und Du kannst Deinem Studio sagen, dass alle neu zu erstellenden Projekte per default auf Option Strict On stehen:
    Studio => Tools => Options => Projects and Solutions => VB Defaults ==> On.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    okay danke :)

    geht aber trozdem nicht. nur wenn ich es direkt in den Form1 code schreibe. wenn ich mir eine classen datei (.vb) anlege dann gehen keine Funktion. Er geht zwar in den code rein er findet aber keine Treffer.

    "Classenname.Funktionsname(variablenübergabe)"

    so rufe ich angenommen unter Form1.load die Funktion auf mit Objektvariable zu der classe natürlich.

    nawiat schrieb:

    geht aber trozdem nicht.
    Wenn Du eine Klasse erstellst, musst Du sie zunächst mit New instanziieren:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim reg = New MyRegistry
    4. MessageBox.Show(reg.CheckRegistry())
    5. End Sub
    6. End Class

    VB.NET-Quellcode

    1. Class MyRegistry
    2. Public Function CheckRegistry() As String
    3. Using rk As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion")
    4. For Each skName As String In rk.GetSubKeyNames()
    5. Using sk As RegistryKey = rk.OpenSubKey(skName)
    6. If skName.Contains("Mozilla Firefox") Then
    7. If sk.GetValue("DisplayIcon") IsNot Nothing Then
    8. Return sk.GetValue("DisplayIcon").ToString
    9. End If
    10. End If
    11. End Using
    12. Next
    13. End Using
    14. Return "Fehler"
    15. End Function
    16. End Class
    Ich denke, Du solltest Dich zunächst mal mit einigen Grundlagen befassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke erstmal. Aber Grundlagen? Ich möchte jetzt nicht überheblich klingen aber ich programmiere seit über 5 Jahren, 4 Programmiersprachen. des weiteren mache ich auch eine Fachinformatiker Ausbildung. Als Programmierer lernt man nie aus. Und ich weiß wie ich Classen Deklariere und initialisiere. Nur geht es ja so auch nicht wie ich schon oben geschrieben habe.

    Danke