Nachdem ich Euch beim letzten Mal versprochen hatte, darauf einzugehen, wie ich die Registry zum Speichern und Auslesen der Einstellungen verwende. Da ich allein darüber mehrere Beiträge schreiben könnte, versuche ich auf die wichtigsten Optionen kurz eingehen.
Noch dazu habe ich mich etwas in die Programmierung mit Klassen eingelesen und etwas Struktur in das Programm gebracht.
Klassen
Eine Klasse kann Methoden und Variablen enthalten. Methoden sind Programmteile, die mit oder ohne zusätzliche Parameter aufgerufen werden können. Methoden werden teilweise auch als Funktionen bezeichnet und sind vergleichbar mit den Funktionen in Powershell Skripten.
Zwei Methoden, die ich erstellt habe, sind für die Menüs. Nach der Darstellung der Optionen und Auswertung der Benutzereingabe wird je nach Auswahl eine weitere Methode aufgerufen, z.b. das Untermenü für die Einstellungen.
Wird eine Klasse als “public” deklariert, so können die Methoden und Variablen dieser Klasse auch aus anderen Klassen heraus aufgerufen werden. Man kann sagen, dass diese Variablen oder Methoden aus anderen Klassen heraus dann mit ihrem gesamten Pfad aufgerufen werden. So kann das Hauptmenü z.B. mit Menu.MainMenu() aufgerufen werden und eine Variable mit GlobalVariables.programFilesX86 verwendet werden.
Klassen in meinem Programm
Bisher habe ich folgende Klassen in meinem Programm erstellt:
- Program
- Die Standardklasse, die auch die Hauptfunktion Main() enthält
- GlobalVariables
- Enthält alle Variablen, die im gesamten Programm verwendet werden können
- Utilities
- Enthält verschiedene Methoden, die als Hilfsfunktion an anderer Stelle aufgerufen werden. Mit diesen Methoden kann der Code etwas komprimiert werden
- Menu
- Hierin sind die Menüs enthalten
- Settings
- Enthält verschiedene Methoden, um Einstellungen zu setzen und auszulesen
- Exec
- Wird die eigentlichen Methoden enthalten, die das Programm ausmachen. Unter anderem die zum Ermitteln der verfügbaren Backups. Mir ist bisher kein schönerer Name eingefallen als Exec. Ideen?
Registry
Ich habe ich beim letzten Mal versprochen, Euch über meine Ausflüge in die Registry zu berichten. Sicherlich kann man dazu eine Menge schreiben. Ich werde mich kurz halten.
Einen Schlüssel anlegen
Beim ersten Start des Programms sind natürlich noch keine Einträge in der Registry vorhanden. Diese müssen zuerst einmal angelegt werden.
RegistryKey fwregkey = Registry.CurrentUser.CreateSubKey(@"Software\Florian Wilke");
In diesem Beispiel lege ich erst eine Variable “fwregkey” an und erstelle mit der Definition gleichzeitig einen Unterschlüssel “Florian Wilke” in HKEY_CURRENT_USER\Software\. Hierin können später unter Umständen weitere Programme ihre Einstellungen ablegen.
Die Variable “fwregkey” kann später weiter verwendet werden, um zum Beispiel neue Parameter mit deren Wert anzulegen oder um vorhandene Werte auszulesen.
Parameter-/Wert-Paare anlegen
Unter dem eben erstellten Schlüssel lege ich nun zwei Parameter mit ihren Werten an.
// Set two new values under the newly created subkey
fwregkey.SetValue("Website", "https://www.fwilke.com");
fwregkey.SetValue("Author", "Florian Wilke");
SetValue als Funktion zu der Variable erledigt das für mich. Als Argumente werden hier z.B. der Parameter (Website) und der Wert (https://www.fwilke.com) übergeben.
Einen Schlüssel öffnen
Ist der Schlüssel in der Registry schon vorhanden und es sollen weitere Aktionen (Werte eintragen, Werte auslesen, …) darin ausgeführt werden, so kann ich auch den Schlüssel auf dem gleichen Weg öffnen, wie ich ihn angelegt habe.
// Open Registry Subkey
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software");
In der ersten Codezeile öffne ich den Schlüssel HKEY_CURRENT_USER\Software\ und halte ihn in der Variable “key” zur weiteren Verwendung vor.
// Open the named subkey
RegistryKey readkey = key.OpenSubKey("Florian Wilke");
In der zweiten Codezeile öffne ich den Unterschlüssel von “key” und halte ihn in der Variable “readkey” zur weiteren Verwendung vor.
Werte auslesen
// Get the value of "Website" and transform the result to.string
string fwwebsite = readkey.GetValue("Website").ToString();
Console.WriteLine(fwwebsite);
Nachdem ich den Schlüssel “HKEY_CURRENT_USER\Software\Florian Wilke\” in “readkey” geöffnet habe, kann ich nun den Wert des Parameters “Website” auslesen. Um es auszugeben, wandle ich das Ergebnis in einen String um und speichere den Wert in die Variable “fwwebsite”.
Es gibt noch eine andere Möglichkeit, einen Wert aus der Registry auszulesen.
public class GlobalVariables
{
// Define registry path to search for and to store setting
public static string progregkeypath = @"HKEY_CURRENT_USER\Software\Florian Wilke\IPOBackupAccess\";
}
public class Testclass
{
string test = Registry.GetValue(GlobalVariables.progregkeypath, "ManagerProgramPath", null).ToString();
Console.WriteLine("The value of test is: " + test);
}
Hier wird mit “Registry.GetValue” der Wert ausgelesen, ohne vorher mit einer zusätzlichen Variable den Schlüssel zu öffnen. Der Wert wird dann in einer Variable gespeichert und kann weiter verwendet werden.
Einen Schlüssel wieder schließen
Hat man einen Schlüssel mit einer Variable geöffnet oder angelegt, dann kann man diesen natürlich auch wieder schließen.
readkey.Close();
key.Close();
Wie es weitergeht
Als nächstes werde ich mich den Einstellungen widmen. Nachdem ich bisher automatisiert Einstellungen überprüft und bei Bedarf angelegt habe, geht es mir im nächsten Schritt darum, Euch die Einstellungen anzeigen und auch anpassen zu lassen. Das Anzeigen soll nicht das Problem sein. Euch aber wie in einem Menü die Option anzubieten, spezifische Einstellungen anzupassen, wird die nächste Herausforderung.
Seid gespannt, ich bin es auch.
Tragt Euch am besten in meinen Newsletter ein, damit Ihr immer informiert werdet, wenn ich ein Update veröffentliche.
Falls Ihr weitere Hilfe mit einer IP Office benötigt, könnt Ihr mich gern über meine Webseite kontaktieren: https://www.fwilke.com
Hi Florian,
erstmal frohes neues Jahr!
gibts schon was neues in dem Fred?
Gruß Manuel
Hi Manuel,
dir auch ein frohes neues Jahr.
Derzeit gibt es nicht viel Neues. Ich war zuletzt ziemlich beschäftigt und habe mich in dem Tool hauptsächlich mit den Programmeinstellungen herumgeschlagen.
Gruß, Florian
Hi Florian,
hast du an diesem wirklich interessanten Thema weiter gemacht?
Ich hätte da großes Intersse dran 🙂
Hi Manuel,
ich gestehe, ich habe das Thema zurückgestellt, da ich zum einen anderes vorgezogen habe. Vor allem aber Habe ich festgestellt, dass ich mich mit C# schwer tue.
In anderen Themen – insbesondere auch, weil ich etwas unter Linux brauchte – bin ich bei Python gelandet und habe die Entscheidung getroffen, das Thema dort noch einmal von Neuem anzugehen. Das verzöert die Sache leider noch einmal etwas.
Viele Grüße, Florian