Wraz z upływem czasu wygaszacze zaczęły spełniać i inne funkcje. Dziś już nikogo nie dziwią ich skomplikowane animacje, wykorzystywane coraz częściej w celach reklamowych. Ciekawa multimedialna prezentacja silniej bowiem oddziałuje na klienta oczekującego na obsłużenie w siedzibie firmy niż folder informacyjny w standardowej (czyli analogowej) postaci.
Osoby ceniące swoją prywatność oraz poufność danych również będą zadowolone, używając wygaszaczy. Ustawione hasło i odpowiednio krótki czas oczekiwania przez system na włączenie screensavera mogą zapobiec wielu niezręcznym sytuacjom. Nikt bowiem nie lubi ostentacyjnie blokować stacji roboczej, w momencie gdy opuszcza stanowisko pracy. Odpowiednio dobrany wygaszacz może wreszcie stanowić “tło” dla relaksujących rozmyślań w czasie przerwy na kawę czy inną niezbyt zdrową używkę.
Jak działa wygaszacz?
Screensaver w Windows jest w zasadzie zwykłą aplikacją. Aby system mógł koordynować jej pracę, program taki musi spełniać przynajmniej cztery założenia:
– rozszerzeniem nazwy pliku aplikacji powinno być SCR w miejsce standardowego EXE;
– wygaszacz musi być wyposażony w zabezpieczenie przed wielokrotnym uruchomieniem własnej instancji w tym samym czasie;
– “rasowy” wygaszacz powinien również umożliwiać własną konfigurację zapisywaną na stałe w systemie;
– przerywać działanie w wyniku zaistnienia jakiegokolwiek zdarzenia związanego z użyciem klawiatury bądź myszy.
Problem rozszerzenia nazwy pliku nie jest trudny do rozwiązania. Wystarczy je zmienić po kompilacji z .exe na .scr. Wymagający Czytelnicy mogą jednak wprost nakazać kompilatorowi Delphi tworzenie takiego pliku. W tym celu uzupełniamy kod pliku projektu dyrektywą kompilatora {
$E scr
} lub zmieniamy domyślne rozszerzenie w polu
Target file extension
(opcja Project | Options, zakładka
Application
).
Nieco trudniej jest zapobiec wielokrotnemu uruchomieniu się tego samego programu. Musi on mianowicie w jakiś sposób zakodować w systemie informacje o swoim działaniu. Jeśli taki “sygnał” odnajdzie kolejna uruchomiona instancja wygaszacza, powinna ona przerwać swoje działanie. Najprostszym rozwiązaniem wydaje się tu użycie tzw. muteksów – globalnych obiektów Windows. Są one reprezentowane przez uchwyty THandle i, co najważniejsze, dostępne dla wszystkich wątków uruchomionych aktualnie w systemie.
Funkcja tworząca mutex, CreateMutex(), wymaga następujących parametrów:
– wskaźnik (do zmiennej typu Psecurity_attributes) służący do opisu praw dostępu; przyjęcie ustawień standardowych uzyskuje się przez użycie wskaźnika pustego (Nil);
– wartość logiczna (typu Boolean), decydująca, czy wątek właśnie tworzący mutex ma być jego właścicielem (True) czy też nie (False);
– nazwa (typu Pchar) identyfikująca mutex w systemie.
CreateMutex po stwierdzeniu braku muteksu o podanej nazwie w systemie tworzy go, a funkcja GetLastError zwraca wartość 0. Jeśli mutex taki już istnieje, CreateMutex tworzy do niego nowy uchwyt, a funkcja GetLastError zwraca wartość ERROR_ALREADY_EXISTS.
Opisany sposób unikania wielokrotnego uruchamiania tego samego programu można zaimplementować na przykład tak:
Ciąg dalszy na następnej stronie.