Man sieht immer wieder, dass versucht wird, Werte aus der Registry mit
Wenn man den My-Namspace umgehen möchte, sind die Klassen
Wie verwendet man den MS.Win32-Namespace um auf die Registry zuzugreiffen?
Ganz einfach. Zuerst einmal den
Dann müssen wir einen RegistryKey instanzieren:
Vorsicht!!!: Weder Registry noch RegistryKey besitzen ein Konstruktor!
Deshalb müssen wir Key folgendermaßen einen Wert zuweisen(in diesem Fall ist es der Schlüssel HKEY_LOCAL_MACHINE)
Edit:Druch den Hinweis von @Artentus: hab eich folgende Zeile editiert:
Da RegistryKey IDisposable implentiert, kann man die Methode
Noch besser wäre es, Using zu verwenden:
Jetzt "sind" wir mit
Um z.B. in den Key
Jetzt "Sind" wir im Key
Aber um jetzt in den Schlüssel auch schreiben zu können, muss manbei OpenSubKey einen zweiten Paramter angeben:
Um laut MSDN schnell er lesen zu können, muss man den Boolean entfernen und stattdessen einen Parameter vom Typ RegistryKeyPermissionCheck angeben:
Dies soll laut MSDN(Link oben) schneller sein als
Wie liest man Werte in einem Schlüssel aus?
Unser bisheriger Code schaut inetwa so aus:
Um jetzt Werte auszulesen, müssen wir folgendermaßen vorgehen:
Wenn man jetzt
Also:
Was ist jetzt wenn die Zeichenfolge nicht existiert? Dann wird Nothing zurückgegeben.
Wenn etwas anderes als Nothing zurückgegeben werden soll, dann muss man bei
Dieser zweite Parameter wird zurückgegben, falls die Zeichenfolge existiert.
Da es in diesem Schlüssel keinen Wert namens
Wie verändert man Werte in einem Schlüssel?
Um Werte zu schreiben, braucht man nur:
Mit diesem Code wird in den Schlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon die Zeichenfolge "Zeichenfolge" mit dem Wert "Wert" erstellt.
Wenn man jetzt auf die Zeichenfolge "(Standard)" zugreiffen will, muss der Parameter "name" leer sein:
Jetzt wird in den "(Standard)"-Wert der Text "Wert" geschreiben.
Jetzt gibt es auch verschiedene Datentype, z.B. Zeichenfolge, DWord, Binärwert, ... Um z.B. einen DWord in die Registry zu schreiben, muss man bei SetValue einen dritten Parameter angeben, der den Datentyp bestimmt:
Damit wird in der "(Standard)"-Wert, der eigentlich eine Zeichenfloge ist, in einen DWord-Typ "verwandelt" und der Wert 15 (Integer) wird reingeschrieben.
Unterschlüssel hinzufügen/löschen
Hinzufügen:
Um einen Unterschlüssel hinzuzufügen(z.B. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Hallo) muss man nicht viel machen:
Aber genau wie bei
Falls man nicht weiß, ob ein Key existiert, kann man auch CreateSubKey verwenden. Falls der Key bereits existriert, wird er ncith überschrieben oder neu erzeugt.
Löschen:
Hinweis!!!: Um einen Key zu löschen, muss man den Key mit Schreibrechten geöffnet haben.
Der Key wird gelöscht, existiert er nicht, passiert nichts. Will man aber, das eine Exception ausgelöst wird, muss mein als zweiten Parameter
Existiert er nicht, wird eine Exception ausgelöst.
Hier der Code in einer Zusammenfassung:
Credits:
@Artentus: --> Beitrag 2
Ich hoffe das Tutorial war hilfreich.
Grüße,
Luki-Progger
My.Computer.Registry.*
zu verändern/auslesen.Wenn man den My-Namspace umgehen möchte, sind die Klassen
Microsoft.Win32.Registry
bzw. Microsoft.Win32.RegistryKey
unbedingt zu verwenden.Wie verwendet man den MS.Win32-Namespace um auf die Registry zuzugreiffen?
Ganz einfach. Zuerst einmal den
Microsoft.Win32
-Namespace importieren.Dann müssen wir einen RegistryKey instanzieren:
Vorsicht!!!: Weder Registry noch RegistryKey besitzen ein Konstruktor!
Deshalb müssen wir Key folgendermaßen einen Wert zuweisen(in diesem Fall ist es der Schlüssel HKEY_LOCAL_MACHINE)
Edit:Druch den Hinweis von @Artentus: hab eich folgende Zeile editiert:
Da RegistryKey IDisposable implentiert, kann man die Methode
Dispose aufrufen
. Dies wäre sehr empfehlenswert.Noch besser wäre es, Using zu verwenden:
Jetzt "sind" wir mit
Key
im Schlüssel HKEY_LOCAL_MACHINE
Um z.B. in den Key
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
zu kommen, muss es folgendermaßen aussehen:Jetzt "Sind" wir im Key
SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Aber um jetzt in den Schlüssel auch schreiben zu können, muss manbei OpenSubKey einen zweiten Paramter angeben:
True
bewirkt, dass man in den Schlüssel auch schreiben kann/darf.Um laut MSDN schnell er lesen zu können, muss man den Boolean entfernen und stattdessen einen Parameter vom Typ RegistryKeyPermissionCheck angeben:
Wie liest man Werte in einem Schlüssel aus?
Unser bisheriger Code schaut inetwa so aus:
Um jetzt Werte auszulesen, müssen wir folgendermaßen vorgehen:
Wenn man jetzt
Option Strict On
hätte, das würde man wissen, das der obrige Code nicht möglich ist, da man "Object" nicht in konverntieren darf.Also:
Was ist jetzt wenn die Zeichenfolge nicht existiert? Dann wird Nothing zurückgegeben.
Wenn etwas anderes als Nothing zurückgegeben werden soll, dann muss man bei
GetValue
einen zweiten Parameter angeben.Dieser zweite Parameter wird zurückgegben, falls die Zeichenfolge existiert.
Da es in diesem Schlüssel keinen Wert namens
BlaBla
gibt, wird Fehler
zurückgegeben.Wie verändert man Werte in einem Schlüssel?
Um Werte zu schreiben, braucht man nur:
Mit diesem Code wird in den Schlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon die Zeichenfolge "Zeichenfolge" mit dem Wert "Wert" erstellt.
Wenn man jetzt auf die Zeichenfolge "(Standard)" zugreiffen will, muss der Parameter "name" leer sein:
Jetzt wird in den "(Standard)"-Wert der Text "Wert" geschreiben.
Jetzt gibt es auch verschiedene Datentype, z.B. Zeichenfolge, DWord, Binärwert, ... Um z.B. einen DWord in die Registry zu schreiben, muss man bei SetValue einen dritten Parameter angeben, der den Datentyp bestimmt:
Damit wird in der "(Standard)"-Wert, der eigentlich eine Zeichenfloge ist, in einen DWord-Typ "verwandelt" und der Wert 15 (Integer) wird reingeschrieben.
Unterschlüssel hinzufügen/löschen
Hinzufügen:
Um einen Unterschlüssel hinzuzufügen(z.B. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Hallo) muss man nicht viel machen:
Aber genau wie bei
OpenSubKey
muss man bei CreateSubKey auch angeben, ob man schreiben will/kann.Falls man nicht weiß, ob ein Key existiert, kann man auch CreateSubKey verwenden. Falls der Key bereits existriert, wird er ncith überschrieben oder neu erzeugt.
Löschen:
Hinweis!!!: Um einen Key zu löschen, muss man den Key mit Schreibrechten geöffnet haben.
Der Key wird gelöscht, existiert er nicht, passiert nichts. Will man aber, das eine Exception ausgelöst wird, muss mein als zweiten Parameter
True
übergeben.Existiert er nicht, wird eine Exception ausgelöst.
Hier der Code in einer Zusammenfassung:
VB.NET-Quellcode
- Public Sub New()
- Using Key As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon") "Öffnet den Key OHNE Schreibrechte (SetValue, DeleteSubKey, CrateSubKey führen zu Exceptions.)
- Dim Shell As String = CStr(Key.GetValue("BlaBa", "Fehler"))'Liest den Wert 'BlaBla' aus
- Key.SetValue("Zeichenfolge", "Wert") 'Ändern/Erstellt 'Zeichenfolge' und ändert den Wert auf 'Wert'
- Key.CreateSubKey("Hallo", True) 'Wird mit Schreibrechten geöffnet.
- Key.DeleteSubKey("Hallo", True) 'Exception wird ausgelöst, falls er nicht existiert.
- End Using
- End Sub
Credits:
@Artentus: --> Beitrag 2
Ich hoffe das Tutorial war hilfreich.
Grüße,
Luki-Progger
Grüße,
Lukas
Fragen über Themen im Forum per Konversation werden gelöscht und die Absender blockiert...
Lukas
Fragen über Themen im Forum per Konversation werden gelöscht und die Absender blockiert...
Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Luki-Progger“ ()