{"id":55000411,"date":"2023-12-01T00:00:00","date_gmt":"2023-12-19T15:03:09","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=411"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Anwendungsdaten_in_der_Registry","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Anwendungsdaten_in_der_Registry\/","title":{"rendered":"Anwendungsdaten in der Registry"},"content":{"rendered":"<p><b>Wenn man es gewohnt ist, mit Access zu arbeiten, liegt es nahe, Anwendungsdaten wie Optionen et cetera in einer Tabelle der Datenbankdatei zu speichern. Unter Excel, Word, Outlook oder auch f&uuml;r twinBASIC-Anwendungen ist das nicht so einfach. Wir k&ouml;nnten zwar eine Datenbank zu diesem Zweck heranziehen, aber je nach Anwendungsfall gibt es praktischere L&ouml;sungen &#8211; zum Beispiel Textdateien, XML-Dateien oder auch die Registry. Letztere schauen wir uns in diesem Artikel an. Wie k&ouml;nnen wir dort Einstellungen sichern und wieder abrufen? Wo in der Registry landen diese dann? K&ouml;nnen wir &uuml;berhaupt per VB, VBA und twinBASIC darauf zugreifen? All dies kl&auml;ren wir auf den folgenden Seiten.<\/b><\/p>\n<h2>Anwendungsdaten verwalten<\/h2>\n<p>Wie schon in der Einleitung geschrieben, gibt es viele Orte, an denen man Anwendungsdaten speichern kann. In einer Access-Datenbank w&uuml;rde man direkt eine Tabelle der verwendeten Datenbank nutzen und in allen Anwendungen w&auml;re es m&ouml;glich, mit wenigen Zeilen Code Daten in Text- oder XML-Dateien zu schreiben und diese auszulesen. Eine weitere Option ist die Registry.<\/p>\n<p>Welche der Optionen man nutzt, h&auml;ngt von der Art der zu speichernden Daten ab. Wir gehen in diesem Artikel davon aus, dass es sich nur um einige wenige Optionen handelt, die gespeichert werden sollen.<\/p>\n<h2>Anwendungsdaten in der Registry<\/h2>\n<p>Es gibt einige API-Funktionen, mit denen man an beliebige Stellen der Registry schreiben kann. Je nachdem, wohin man schreiben m&ouml;chte, ben&ouml;tigt man aber auch wieder Administrator-Rechte.<\/p>\n<p>Grunds&auml;tzlich ist es auch keine besonders gute Idee, die Registry an nicht daf&uuml;r vorgesehenen Stellen zu ver&auml;ndern &#8211; selbst wenn man nur ein paar Datens&auml;tze hinzuf&uuml;gt.<\/p>\n<p>Neben diesen API-Funktionen gibt es aber auch noch spezielle VBA-Funktionen, mit denen wir bestimmte Bereiche der Registry f&uuml;r uns nutzen k&ouml;nnen. Dazu brauchen wir keine Admin-Rechte, denn diese Eintr&auml;ge liegen innerhalb des Bereichs des jeweiligen Benutzers.<\/p>\n<h2>Registry-Funktionen der Interaction-Klasse<\/h2>\n<p>Wenn wir im Objektkatalog nach Befehlen suchen, die einen Text wie Registry enthalten, suchen wir vergeblich.<\/p>\n<p>Mit ein wenig Forschergeist finden wir jedoch schnell die <b>Interaction<\/b>-Klasse und darin die Elemente aus Bild 1.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_411_001.png\" alt=\"Elemente der Interaction-Klasse\" width=\"424,6267\" height=\"618,567\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Elemente der Interaction-Klasse<\/span><\/b><\/p>\n<p>Hier sehen wir die folgenden Funktionen:<\/p>\n<ul>\n<li><b>DeleteSetting<\/b>: L&ouml;scht die mit den Parametern angegebene Einstellung.<\/li>\n<li><b>GetAllSettings<\/b>: Liefert alle Einstellungen des mit den Parametern angegebenen Bereichs.<\/li>\n<li><b>GetSetting<\/b>: Liefert die mit den Parametern angegebene Einstellung.<\/li>\n<li><b>SaveSetting<\/b>: Speichert eine Einstellung in dem mit den Parametern angegebenen Bereich.<\/li>\n<\/ul>\n<p>Die vier Funktionen verwenden alle &auml;hnliche Parameter:<\/p>\n<ul>\n<li><b>AppName<\/b>: Name der Anwendung, unter welcher die Einstellung gespeichert werden soll<\/li>\n<li><b>Section<\/b>: Name des Bereichs unterhalb der Anwendung<\/li>\n<li><b>Key<\/b>: Name des Schl&uuml;ssels, also der Option<\/li>\n<li><b>Setting<\/b>: Wert der Option<\/li>\n<\/ul>\n<h2>Wo werden die Werte in der Registry gespeichert?<\/h2>\n<p>Das k&ouml;nnten wir vermutlich leicht &uuml;ber das Internet erfahren, aber manchmal macht ein wenig Suche von Hand Spa&szlig;. Dazu legen wir &uuml;berhaupt erst einmal einen Eintrag an und nutzen dazu den Befehl <b>SaveSetting<\/b>. Diesen rufen wir &uuml;ber das Direktfenster des VBA-Editors wie folgt auf und verwenden Werte f&uuml;r die Parameter, die den Parameternamen selbst entsprechen:<\/p>\n<pre>SaveSetting \"AppName\", \"Section\", \"Key\", \"Setting\"<\/pre>\n<p>Hier kann eigentlich kein Fehler passieren &#8211; selbst wenn die Einstellung bereits vorhanden ist, wird diese mit dem neuen Wert im vierten Parameter &uuml;berschrieben.<\/p>\n<p>Danach &ouml;ffnen wir die Registry mit dem Befehl <b>Registrierungs-Editor<\/b>, den wir in das <b>Suchen<\/b>-Feld von Windows eingeben.<\/p>\n<p>Hier w&auml;hlen wir den Men&uuml;befehl <b>Bearbeiten|Suchen <\/b>aus und geben dort den Wert <b>AppName<\/b> ein.<\/p>\n<p>Au&szlig;erdem deaktivieren wir die beiden Optionen <b>Werte <\/b>und <b>Daten<\/b>, damit nur in den Schl&uuml;sseln gesucht wird (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_411_002.png\" alt=\"Suche nach dem neuen Registry-Eintrag\" width=\"574,6265\" height=\"361,7172\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Suche nach dem neuen Registry-Eintrag<\/span><\/b><\/p>\n<p>Je nach der Menge der Eintr&auml;ge, die sich im Laufe der Zeit in der Registry angesammelt haben, dauert die Suche einige Sekunden.<\/p>\n<p>Kurz danach zeigt die Registry jedoch das Suchergebnis wie in Bild 3 an. Hier sehen wir die Elemente aus den Parametern <b>AppName <\/b>und <b>Section <\/b>und darin auf der rechten Seite den Schl&uuml;ssel <b>Key <\/b>mit dem Wert <b>Setting<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_411_003.png\" alt=\"Der neue Eintrag in der Registry\" width=\"649,627\" height=\"308,5988\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Der neue Eintrag in der Registry<\/span><\/b><\/p>\n<p>Spannend ist nun, wo diese Elemente untergebracht wurden. Es handelt sich um einen Bereich unterhalb des Root-Elements <b>HKEY_CURRENT_USER<\/b>, was der Bereich f&uuml;r den aktuellen Benutzer ist.<\/p>\n<p>Meldet sich also anschlie&szlig;end ein anderer Benutzer auf diesem Rechner an, kann er nicht auf diese Eintr&auml;ge zugreifen &#8211; au&szlig;er, er hat sie f&uuml;r sich selbst ebenfalls angelegt.<\/p>\n<p>Unterhalb von <b>HKEY_CURRENT_USER <\/b>finden wir die Elemente <b>Software <\/b>und <b>VB and VBA Program Settings<\/b>, bevor bereits die von uns angelegten Elemente folgen.<\/p>\n<h2>Eine Einstellung aus der Registry auslesen<\/h2>\n<p>Damit kommen wir zum zweiten Befehl namens <b>GetSetting<\/b>. Dieser erwartet mit Ausnahme des letzten Parameters die gleichen Parameter wie der Befehl, mit dem wir den Eintrag angelegt haben, also <b>AppName<\/b>, <b>Section <\/b>und <b>Key<\/b>. Wir geben den Befehl so im Direktbereich ein, dass das Ergebnis direkt dort ausgeben wird, und erhalten das folgende Ergebnis:<\/p>\n<pre>  GetSetting(\"AppName\", \"Section\", \"Key\")\r\nSetting<\/pre>\n<h2>Einstellung &auml;ndern<\/h2>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000\"><a style=\"color: #ff0000\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000411\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000411?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000411\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"b8dfc3caa2\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn man es gewohnt ist, mit Access zu arbeiten, liegt es nahe, Anwendungsdaten wie Optionen et cetera in einer Tabelle der Datenbankdatei zu speichern. Unter Excel, Word, Outlook oder auch f&uuml;r twinBASIC-Anwendungen ist das nicht so einfach. Wir k&ouml;nnten zwar eine Datenbank zu diesem Zweck heranziehen, aber je nach Anwendungsfall gibt es praktischere L&ouml;sungen &#8211; zum Beispiel Textdateien, XML-Dateien oder auch die Registry. Letztere schauen wir uns in diesem Artikel an. Wie k&ouml;nnen wir dort Einstellungen sichern und wieder abrufen? Wo in der Registry landen diese dann? K&ouml;nnen wir &uuml;berhaupt per VB, VBA und twinBASIC darauf zugreifen? All dies kl&auml;ren wir auf den folgenden Seiten.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662023,66062023,44000021,44000025],"tags":[],"yst_prominent_words":[],"class_list":["post-55000411","post","type-post","status-publish","format-standard","hentry","category-662023","category-66062023","category-Entity_Framework","category-VBAProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000411","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000411"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000411\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000411"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000411"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000411"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000411"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}