Zapisywanie ustawień aplikacji w rejestrze systemu Windows

przez | 2024-07-11

Tworząc w VBA nawet proste skrypty dość często zachodzi potrzeba zapisania gdzieś pewnych danych konfiguracyjnych. Przykładowo niedawno pisałem aplikację dla zaprzyjaźnionego biura rachunkowego do wysyłania informacji o wysokości obliczonych podatków do klientów.

I tutaj wpadłem na pomysł że można w Outlooku zapisać wiadomość z opóźnioną wysyłką (np. 15 minut) aby w razie gdyby księgowa źle coś kliknęła można było usunąć wiadomości ze skrzynki nadawczej; albo sprawdzić czy wiadomości zostały poprawnie wygenerowane.

Z czasem jak wszystko jest OK księgowa mogłaby chcieć ustawić, aby od teraz nowe wiadomości wychodziły natychmiast.

Jak najprościej zapisać dowolne ustawienie? Otóż dawniej tworzyłem proste pliki INI w których zapisywałem ustawienia. Ale tutaj jest masa roboty: należy zapisać plik w odpowiednim folderze, przy odczytywaniu sprawdzić czy plik istnieje (jeśli nie to załadować jakieś domyślne ustawienia), odpowiednio parsować plik przy odczytywaniu ustawień. Na szczęście mamy w VBA 2 wygodne instrukcje do zapisu (i odczytu) danych z rejestru systemu Windows.

Aby zapisać daną zmienną można napisać taki fragment kodu:

SaveSetting "PROGRAM", "PODFOLDER", "NAZWA ZMIENNNEJ", "WARTOŚĆ"

Np.

SaveSetting "Abakus", "Ustawienia", "Opóźnienie", "20"

Po wywołaniu tej instrukcji w rejestrze systemu w gałęzi: HKEY_CURRENT_USER\Software\VB and VBA Program Settings\ zostanie utworzony nowy folder (gałąź) o nazwie Abakus a w nim podfolder o nazwie Ustawienia, gdzie pojawi się klucz o nazwie Opóźnienie i przypisanej wartości 20. Ponowne wywołanie tej instrukcji oczywiście nadpisze wartość tego klucza w rejestrze. Może to zabrzmiało nieco skomplikowanie, ale myślę, że ten zrzut ekranu z programu regedit.exe wszystko wyjaśni:

A jak odczytać taką wartość? Równie prosto:

Opóźnienie = GetSetting("Abakus", "Ustawienia", "Opóźnienie", 0)

Czyli do zmiennej o nazwie Opóźnienie odczytujemy wartość klucza Opóźnienie, która znajduje się w gałęzi Abakus\Ustawienia. Jeśli taki klucz nie istnieje to zostanie do zmiennej przypisana wartość domyślna 0 (czwarty argument instrukcji GetSetting).

Uwaga: instrukcje SaveSetting i GetSetting zapisują dane w rejestrze systemu Windows tylko w gałęzi: HKEY_CURRENT_USER\Software\VB and VBA Program Settings. Niestety ale za ich pomocą nie możemy modyfikować dowolnej wartości w dowolnym miejscu w rejestrze systemu Windows co jest pewną wadą, z drugiej strony dzięki temu ograniczeniu te instrukcje mają dość prostą składnię.

Jeden komentarz do „Zapisywanie ustawień aplikacji w rejestrze systemu Windows

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.