Śpij spokojnie…

Pierwotnym przeznaczeniem wygaszaczy była i jest do dziś ochrona monitora przed nadmiernym (i nierównomiernym) zużyciem warstwy luminoforu wyścielającego wewnętrzną część jego kineskopu. Sytuacja taka ma miejsce przy długotrwałej ekspozycji statycznych obrazów, a efekty jej szkodliwego działania spotęgują się przy dużym zróżnicowaniu kontrastowym poszczególnych elementów obrazu (np. białego prostokąta na czarnym tle). I właśnie w celu zminimalizowania ryzyka szybkiej utraty właściwości świetlnych monitora systemy operacyjne “pozwalają” wygaszaczom przejmować kontrolę nad obrazem przez niego wyświetlanym. Następuje to zwykle po pewnym okresie bezczynności komputera (a dokładniej braku akcji ze strony użytkownika).

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.

Więcej:bezcatnews