Klasa do obsługi rejestru Windows
marcel.slip
Wstęp
Dawno temu jak zaczynałem programować w Delphi stworzyłem dla siebie moduł obsługi rejestru Windows i umieściłem go na na tej stronie Moduł obsługi rejestru, ini dla Delphi
Obecnie uczę się C# i znów potrzebował łatwej obsługi rejestru napisałem swoją pierwszą klasę która to bardzo upraszcza. Wszelkie krytyczne opinie są mile widziane. Klasę przetestowałem i działa znakomicie.
Strona domowa
Klasę można pobrać z mojego repozytorium na GitHub: https://github.com/m4rcelpl/Register_Class_CSharp
Instrukcja
*Na przykładzie Visual Studio. *
W Solution Explorer dodaj plik RegisterClass.cs następnie w kodzie na samej górze:
using m4.RegisterClass;
Oraz w swojej metodzie:
RegClass Reg = new RegClass();
I to wszystko możesz już łątwo odczytywać i zapisywać wartości do rejestru.
Przykłady
Zapis
REG_SZ (string, string, string, string)
Reg.WriteString("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Version Name", "Odyn");
REG_DWORD (string, string, string, int)
Reg.WriteDWord("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Version Number32", 2);
REG_QWORD (string, string, string, long)
Reg.WriteExString("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Location", "c:\\Program Files\\My program");
REG_MULTI_SZ (string, string, string, string[])
Reg.WriteMultiString("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Setting", new string[]{"bold", "52", "close"} );
Zapis do rejestru wartości REG_BINARY (string, string, string, byte[])
Reg.WriteBin("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Some data", new byte[] {10,10,10});
Odczyt
Ostatnia wartość jest to wartością domyślną która zostanie zwrócona w przypadku błędu.
REG_SZ oraz REG_EXPAND_SZ
MessageBox.Show("Version Name: " + Reg.ReadString("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Version Name", null));
MessageBox.Show("Version Name: " + Reg.ReadString("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Location", null));
REG_DWORD
MessageBox.Show("Version Number32: " + Reg.ReadInt("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Version Number32", 0));
REG_QWORD
MessageBox.Show("Version Number64: " + Reg.ReadInt64("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Version Number64", 0));
REG_MULTI_SZ
string[] Value = Reg.ReadMultiString("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Setting", null);
string Message = "";
foreach (string value in Value)
{
Message = Message + value + " ";
}
MessageBox.Show("Setting: " + Message);
REG_BINARY
byte[] ValueByte = Reg.ReadBinary("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Some data", null);
string Suma = "";
foreach (byte value in ValueByte)
{
Suma = Suma + value;
}
MessageBox.Show("Some data: " + Suma);
Usuwanie
Przykład usunięcia wszystkich wartości które stworzyliśmy wcześniej.
Reg.DeleteValue("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Version Name");
Reg.DeleteValue("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Version Number32");
Reg.DeleteValue("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Version Number64");
Reg.DeleteValue("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Location");
Reg.DeleteValue("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Setting");
Reg.DeleteValue("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Some data");
Oraz usunięcie całego katalogu.
Reg.DeleteKey("HKEY_CURRENT_USER", "SOFTWARE\\My Program");
Obsługa błędów
Postanowiłem dodać obsługę błędów. Domyślnie jest ona wyłączona, jeśli chcemy ją włączyć wystarczy przełączyć jedną zmienną:
Reg.ViewError = true;
W przypadku błędu zostanie wygenerowany szczegółowy komunikat. Aby ułatwić Debugowanie i zlokalizowanie która operacja wygenerowała błąd można zmienić nazwę okna z błędem przed każdą operacją:
Reg.ViewErrorTitle = "Write String Operation Error";
Reg.WriteString("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Version Name", "Odyn");
Reg.ViewErrorTitle = "Write DWord Operation Error";
Reg.WriteDWord("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Version Number32", 2);
Jeśli natomiast chcesz samemu obsłużyć błąd wystarczy że po operacji Zapisu/Odczytu sprawdzimy stan zmiennej GetError domyślnie jest ustawiony na **false ** w przypadku błędu zmieni się na true
Reg.WriteString("HKEY_CURRENT_USER", "SOFTWARE\\My Program", "Version Name", "Odyn");
if (Reg.GetError)
{
//Wystąpił błąd zrób coś.
}
Podziękowania
Jako początkująca osoba wzorowałem się na pracy Francesco Natali
http://www.codeproject.com/Articles/3389/Read-write-and-delete-from-registry-with-C