![]() |
|
Programowanie:
Artykuły
FAQ
Download
Książki
WWW:
Artykuły
Narzędzia
Kursy
Darmowe
FAQ
Skrypty
Humor
Inne:
Forum
Wiki
Liczniki
Linki
Chat
Grafika
Video
Inne
|
|
Autor: Adam Kowalczyk (akowalc1@elka.pw.edu.pl)
Co to jest wygaszacz ekranu? Wygaszacz ekranu jest specjalnym programem, który uruchamiany jest przez system po stwierdzeniu dłuższego czasu bezczynności użytkownika. Jego podstawowym zadaniem jest zabezpieczanie monitora, a właściwie jego warstwy luminoforu, przed zniszczeniem poprzez długotrwale wyświetlanie tego samego obrazu. Dodatkowo może on pełnić funkcje prostego zabezpieczenia przed wykorzystaniem komputera przez osoby niepowołane. Z punktu widzenia systemu Windows wygaszacz jest programem, można się o tym przekonać zmieniając rozszerzenie dowolnego programu na scr i odwrotnie. Nie jest to jednak zwykły program. Aby pracował on poprawnie jako wygaszacz ekranu musi spełniać kilka warunków. Jak utworzyć wygaszacz ekranu. Najprostszą metodą stworzenia własnego wygaszacza ekranu jest wykorzystanie znajdującej się w systemie Windows biblioteki scrnsave.dll. Biblioteka ta zawiera w sobie kilka funkcji ułatwiających tworzenie wygaszaczy ekranu. Przede wszystkim jest to funkcja main wraz z kodem inicjalizującym użycie wygaszacza. Dba ona o wywoływanie w odpowiednim momencie okna dialogowego, do ustawiania parametrów wygaszacza, lub wywołanie samego wyświetlacza. Dodatkowo sama zamyka wygaszacz po reakcji użytkownika, a przy jego wywoływaniu czyści tło. Aplikacja powinna zawierać zdefiniowane trzy funkcje: ScreenSaverConfigureDialog i ScreenSaverProc RegisterDialogClasses. Dodatkowo w zasobach powinno być zdefiniowane okno o dialogowe o identyfikatorze 2003. To okno konfiguracyjne jest wyświetlane wtedy, gdy użytkownik wybierze przycisk Ustawienia z zakładki Wygaszacz ekranu okna Właściwości ekranu. Aby utworzyć taki wygaszacz potrzeby jest dowolny kompilator języka C, umożliwiający tworzenie aplikacji dla Windows. Przykładem mogą być darmowe GCC-MINGWIN i LCC-WIN32. (http://www.cs.virginia.edu/~lcc-win32/index.html) A wiec zaczynamy od tego ze tworzymy nowy projekt, ustawiamy jego typ na aplikacje Windows (zazwyczaj nazywa się to Windows App), i pouczamy linkiera aby z naszym projektem linkował biblioteki: scrnsave.lib i comctl32.lib. Oczywiście dodajemy ,o ile jest to konieczne a zazwyczaj jest, zasoby w których zdefiniowane jest okno dialogowe o nazwie 2003 Budowa wygaszacza. Kod bardzo prostego wygaszacza znajduje się poniżej.
Działanie przedstawionego powyżej wygaszacza polega na losowym wyświetlaniu na ekranie punktów. Szybkość z jaka się one pojawiają oraz ich liczbę można regulować w okienku z ustawieniami. Jego rdzeń stanowią wspomniane wcześniej funkcje ScreenSaverConfigureDialog, ScreenSaverProc i RegisterDialogClasses. Nazwy tych funkcji i ich nagłówki są niezbędne i musza wyglądać dokładnie tak jak to zostało pokazane w przykładzie. Inaczej nie zostaną one zlokalizowane. Funkcja ScreenSaverConfigureDialog jest odpowiedzialna za obsługę okna dialogowego służącego do konfiguracji wygaszacza. Natomiast funkcja ScreenSaverProc jest właściwą funkcją obsługująca sam wygaszacz podczas pracy. Jej podstawowym zadanie jest obsługą komunikatów przychodzących od systemu. Najważniejsze z nich to: WM_CREATE, WM_TIMER, WM_DESTROY. Komunikat WM_CREATE jest pierwszym komunikatem jaki otrzymuje program po uruchomieniu. Jego obsługa powinna zawierać - wczytanie danych konfiguracyjnych z rejestru, (funkcja Odczyt), - inicjacje zmiennych i struktur danych programu, - inicjacje timera. Komunikat WM_TIMER przychodzi regularnie do aplikacji po uruchomieniu timera. W jego obsłudze powinna być zawarta cala obsługa animacji związanych z wygaszaczem, a więc przede wszystkim rysowanie zawartości ekranu. Zadanie to wykonuje funkcja RysujWygaszacz. Komunikat WM_DESTROY jest sygnałem do zakończenia pracy programu. W trakcie jego wykonywania program usuwa zainicjowany wcześniej timer. Komunikat WM_ERASEBKGND jest wywoływany gdy system zamierza wyczyścić tło przy uruchamianiu wygaszacza. Jest on wywoływany przed wyczyszczeniem tła, w czasie jego obsługi systemowa funkcja obsługi zdarzeń czyści zawartość okna. Dlatego jego przechwytywanie umożliwia operowanie na oryginalnej zawartości ekranu. Zapis ustawień wygaszacza może być przeprowadzany bezpośrednio w rejestrze systemowym. W tym celu program musi stworzyć własny klucz. Można umieścić go w gałęzi: HKEY_LOCAL_MACHINE//SOFTWARE//NazwaFirmy//NazwaProgramu//.. lub :HKEY_CURRENT_USER//software//NazwaFirmy//NazwaProgramu//. Pierwsza gałąź służy do zapisu informacji konfiguracyjnych specyficznych dla całego systemu, natomiast druga jest przeznaczona na informacje związane z konkretnym użytkownikiem. Np. ..//JacekiWacek//WygaszaczLatajaceSledzie Przy pierwszym uruchomieniu wygaszacz powinien potrafić się zorientować że jest uruchamiany pierwszy raz i stworzyć odpowiedni klucz. Trzecią funkcja jaka należy zdefiniować tworząc własny wygaszacz jest: RegisterDialogClasses. Jej zadaniem jest rejestracja przez program własnych obiektów sterujących lub klas dodatkowych okien. Jaki może być wygaszacz i co on będzie robił? To już zależy tylko i wyłącznie od wyobrazili jego twórcy czyli twojej. Ja ze swej strony mogę ci tylko troszkę podpowiedzieć Wygaszacze ekraru podzielił bym na kategorie: - punktowo - obiektowe, - bitmapowe, - obrazowe. Wygaszacz punktowo-obiektowy to taki w którym obraz na ekranie powstaje z szeregu punktów (lub innych prostych obiektów). Program sam je generuje na podstawie odpowiedniego algorytmu i sam je w odpowiednim momencie usuwa. W ten sposób można zrealizować mnóstwo pomysłów które opierają się na układach prostych elementów (punkty, linie, koła). Tego typu jest zaprezentowany powyżej wygaszacz. Wygaszacz bitmapowy jest podobny do wspomnianego wyżej z tym ze nie generuje sam całego obrazu ale korzysta z gotowego zestawy bitmap zapisanych w programie. Może on pokazywać przesuwający się obiekt po ekranie, lub ten sam obiekt w rożnych widokach ( każdy z widoków to oddzielna bitmapa). Wygaszacz obrazowy to taki który nie generuje sam obrazu ale zajmuje się przekształcaniem obrazu widocznego na monitorze w momencie jego wywołania. Może go np. ściemniać, rozmywać lub deformować i inny sposób. Możliwe jest wiele różnych przekształceń. Oczywiście wszystkie powyższe pomysły można jak najbardziej łączyć ze sobą. Nie ma tu żadnych reguł. Czym ciekawsze i nieoczekiwane będzie zachowanie programu tym lepiej. Przykładem jest znany mi wygaszacz przedstawiający chodzącego sobie po ekranie stworka, który co jakiś czas wygryza kawałek ekranu. Jest on połączeniem dwóch ostatnich technik. Zachowywana jest dotychczasowa zawartość ekrany na której stworek jest wyświetlany jako animacja. Wygaszacz ekrany i dźwięk. W wygaszaczach dźwięk odgrywa pomocnicza role i często nie występuje. Tym niemniej można zastosować proste efekty dźwiękowe. Czasami mogą być one ważnym elementem wygaszacza. Przypomniał mi się tu wygaszacz przedstawiający śpiąca sylwetkę Dino (taki zwierzaczek z kreskówki Flinstonowie) a z głośnika dobiega bardzo realistyczne chrapanie. Jedna uwaga. UŻYTKOWNIK ZAWSZE MUSI MIEĆ MOŻLIWOŚĆ WYŁACZENIA DŹWIEKU W WYGASZACZU. Włączanie wygaszacza ekranu. Czasami może zaistnieć w jakimś programie konieczność uruchomienia wygaszacza ekranu. Do tego można użyć komunikatu WM_SYSCOMMAND z parametrem SC_SCREENSAVE. Najbezpieczniejszą metodą wydaje mi się wysłanie go do desktopu. Kod włączający wygaszacz ekranu może mieć postać: SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0); Włączony zostanie wygaszacz wybrany w oknie właściwości ekranu w zakładce Wygaszacz ekranu. Ale jeżeli żaden wygaszacz nie został wybrany, nie nastąpi jakakolwiek operacja Na koniec. Dziękuję tym wszystkim którzy dotarli do końca tego tekstu i życzę owocnej pracy. Będę wdzięczny za wszelkie uwagi krytyczne na jego temat. Prosił bym również aby osoby korzystające z niego i dołączonych do niego pochwaliły się swoimi projektami. Literatura. Zawarte w niemniejszym dokumencie informacje pochodzą w znacznej części z własnych doświadczeń, część z nich zaś pochodzi z książki: Janusz Karmiński "Praktyczny kurs programowania w Windows 95.". Helion
| ||||||||||||||||||||||||||||||||||||||||||||||||||
|