C#

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 http://4programmers.net/Delph[...]2ugi_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/Ar[...]d-delete-from-registry-with-C

C#

0 komentarzy