Programowanie w języku C#

Klasa do obsługi rejestru Windows


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/Art[...]nd-delete-from-registry-with-C