/-----------------------------------\
|  DUCH - Autor: Paweł Konarski     |
|  e-mail: kpawel@onet.pl           |
|  WWW: http://www.pess.pl/duch     |
\-----------------------------------/

Jeżeli byłyby jakieś pytania/uwagi/propozycje dotyczące programu to proszę
o kontakt.
Mam nadzieję, że ta "instrukcja" będzie w miarę zrozumiała ;-))
Jeżeli nie to proszę o maila - postaram się wytłumaczyć co i jak i ewentualnie
poprawić ten opis.
--------------------------------------------------------------------------------
Program DUCH jest rozprowadzany jako freeware. Można go używać
i rozpowszechniać w niezmienionej postaci, bez żadnych ograniczeń
i bez żadnych opłat. Zabrania się deasemblacji programu lub zmieniania
zawartości plików należących do programu. Autor nie ponosi odpowiedzialności
za szkody wynikłe z używania oraz działania tego programu.

Minimalne wymagania systemowe:
 - Windows NT+SP3
 - Windows 2000
 - Windows XP
 - lub nowszy niż te powyżej


Program nie działa pod W9x/ME.

Duch został przetestowany na Win2000Prof + SP4.
Jeżeli ktoś posiada innego Windowsa to proszę o informacje czy tam Duch działa.
Program powstał przy pomocy Borland Delphi (www.borland.com).
--------------------------------------------------------------------------------
PLIKI PROGRAMU:
Duch.exe - wymagany; główny plik programu
DuchKonf.exe - program do konfiguracji
DuchDLL.dll - biblioteka, która pokazuje okienko, gdy komputer jest
zablokowany. W przypadku braku tej biblioteki program po prostu
nie pokaże okienka ;-))

DuchDLL.bmp lub DuchDLLT.bmp - bitmapy zawierające okienka wygląd okienek
Więcej informacji przy opisie DuchDLL.
--------------------------------------------------------------------------------
Przy pomocy programu można:
 - obsługiwać dodatkowe klawisze na klawiaturze (uruchamiać pliki, wysyłać
   komunikaty, itp.)
 - "wyłączać" klawisze
 - przemapować klawisze (łącznie z klawiszami specjalnymi: ALT, CTRL, SHIFT)
 - emulować wcisnięcia klawiszy dla programów w tle
 - opcja blokowania komputera
 - wysuwać/zamykać tackę CD-ROMu z poziomu klawiatury
 - obsługiwać Winampa
 - zmianiać głośność
 - robić wszystko za pomocą ruchów myszki (gesty)
 - kierować myszką z poziomu klawiatury
 - obsługiwać statusy w komunikatorze Tlen.pl
 - obsługiwać przeglądarkę IE
 - obsługiwać czas bezczynności systemu
 - przemapowywać klawisze myszki (lewy, œrodkowy i prawy)
--------------------------------------------------------------------------------
INSTALACJA:
Należy rozpakować Ducha do jakiegoś katalogu i tyle ;-))
--------------------------------------------------------------------------------
KONFIGURACJA:
Najpierw nalezy uruchomić Ducha (duch.exe). Potem można już odpalić program
konfiguracyjny DuchKonf (DuchKonf.exe). Program ten składa się z 2 okienek:
 - to po lewej pokazuje kody wszystkich aktualnie wciskanych klawiszy
 - to po prawej to zawartość pliku Duch.dat (czyli konfiguracja Ducha)

Okno z kodami uzupełnia się samo (w miarę wciskania klawiszy). Można je
wyczyścić ("Wyczyść listę") lub zablokować ("Zablokuj dodawanie kodów").
Ostatnią opcją jest "Zablokuj przetwarzanie klawiszy". Służy ona do całkowitego
blokowania klawiatury (w celu zdobycia niektórych kodów klawiszy np: ALT+F4 -
gdyby nie ta opcja to okno programu zostałoby zamknięte).
Odnośnie kodów:
Każda linia w tym oknie to ZnakASCII wciśniętego klawisza, średnik i 3 kody
tego klawisza. Wpisując kody do poleceń programu (o tym później) nalezy pamiętać
o wycięciu tego znaku przed średnikiem razem z tym średnikiem.

Drugie okno - jak już pisałem - zawiera plik konfiguracyjny Duch.dat. Jest to
normanly plik tekstowy z wypisanymi komendami dla Ducha. Każda linia może
scharakteryzować jeden klawisz lub też jedną kombinację klawiszy. To zależy od
użytej opcji. Pomocna przy wypełnianiu tego pliku jest lista dostepnych poleceń.
Można się do niej dostać poprzez kliknięcie prawym klawiszem myszki w tym oknie
lub poprzez kliknięcie przycisku "Wstaw polecenie". W obu przypadkach dane
polecenie zostanie wstawione w miejsce gdzie znajduje się kareta (jakby ktoś nie
wiedział: ta migająca kreseczka ;-)). Po wybraniu niektórych poleceń z listy
(np. Plik, Key) pojawią się okna pomagające w konfiguracji.

Pisząc plik konfiguracyjny należy pamiętać o kilku zasadach:
 - Wszystkie polecenia napisane po danej deklaracji klawisza, a przed następną
   deklaracją należą do tej pierwszej (nie trzeba pisac wszystkich poleceń
   w jednej linii)
 - Wszystkie linie rozpoczynające się znakiem "#" są ignorowane
 - Jeżeli znak "#" wystepuje w środku linii to ignorowane jest wszystko przed
   tym znakiem

Przykładowy plik konfiguracyjny:
<PLIK>
ALT+TAB# {Key 9,15,32}
ESC#     {Key 27,1,0}   <Run notepad.exe>
                        <Group abcd><Group abd>
F1#      {Key 112,59,0} <Command Block><SetGroup>
F2#      {Key 113,60,0} <MapKey 112,59,0>
#F3#     {Key 114,61,0} <Run mspaint.exe><Command Block>
                        <SetGroup abcd>
A->B#    {Comb 65,}     <MapKey 66,><DonTDelKey>
X->Ą#    {Comb 88,}     <MapKey 65,LAlt><OnlyIfLockOn NumLock>
WinL#    {Key 91,91,1}  <MapSpec lshift,ralt>
Password=1234
DfGroup=abcd
</PLIK>


Opis danych w pliku konfiguracyjnym: (opis poleceń jest niżej)
ALT+TAB# - ta linijka blokuje skrót ALT+TAB
ESC# - przy wcisnięciu klawisza ESC odpala notatnika (i blokuje klawisz ESC)
dodatkowo klawisz ESC nalezy do grup: abcd i abd
F1# - blokuje komputer
zmienia grupę na grupę ogólną
F2# - przemapowuje klawisz F2 na F1
#F3# - to linia jest cała komentarzem (znak "#" jest pierwszy w linii)
gdyby go wyrzucić to przy naciśnięciu F3 odpaliłby się notatnik
i komputer zostałby zablokowany; i jeszcze znieniłby grupę na abcd
A->B# - przemapowanie A na B i dodatkowo litera A nie zostanie wykasowana
(czyli w efekcie to jakby się wcisnęło B, a potem A)
X->Ą# - przemapowanie X na Ą ale tylko wtedy gdy NumLock jest włączony
WinL# - przemapowuje lewy klawisz Windows (o kodach 91,91,1) na kombinacje
lewy SHIFT + prawy ALT

UWAGI:
W deklaracji klawiszy "{Comb 65,}" i "{Comb 88,}" na końcu wystapiły przecinki.
Są one NIEZBĘDNE, nawet jezeli po nich nie występuje żaden modyfikator.

--------------------------------------------------------------------------------
Ogólna charatektystyka danych:
Każda linijka może być deklaracją klawisza lub też opcją programu.

--------------------------------------------------------------------------------
OPIS MODYFIKATORÓW:
LAlt   - lewy ALT
RAlt   - prawy ALT
LShift - lewy SHIFT
RShift - prawy SHIFT
LCtrl  - lewy CTRL
RCtrl  - prawy CTRL
LWin   - lewy klawisz Windows
RWin   - prawy klawisz Windows
APPS   - klawisz Windowsowy po prawej stronie (wywołuje menu kontekstowe);
         nie wiem jak go nazwać ;))


DEKLARACJE KLAWISZY:
każda linijka składa się z części:
komentarz# {kod_klawisza}<POLECENIE1><POLECENIE2>...

 - (dane dla konfiguracji klawisza są oznaczone nawiasami "{" i "}"; polecenia
   dla klawisza oznaczone są znakami "<" i ">")
 - w jednej linijce może być tylko jedna informacja o kodzie klawisza

Opis składowych:
 - komentarz -> ;-)) (nie jest wymagany)
 - {kod_klawisza} -> kody charakteryzujące klawisz (lub kombinacje klawiszy)
   Typy kodów:
    - {Key kod_1, kod_2, kod_3} -> deklaracja klawisza na podstawie 3 kodów
      -> kod_1, kod_2 i kod_3 - kody podane przez program konfiguracyjny

    - {Comb kod_ascii, mod} -> deklaracja klawisza na podstwie kodu ASCII
                               i modyfikatorów
      -> kod_ascii - kod ASCII wybranego klawisza
      -> mod - modyfikatory:(porozdzielane przecinkami)
         [LAlt, RAlt, LShift, RShift, LCtrl, RCtrl, LWin, RWin, APPS]

    - {KeySpec kod_1, kod_2, kod_3, mod} -> deklaracja klawisza na podstawie
                                            3 kodów i modyfikatorów
      -> kod_1, kod_2 i kod_3 - kody podane przez program konfiguracyjny
      -> mod - modyfikatory:(porozdzielane przecinkami)
         [LAlt, RAlt, LShift, RShift, LCtrl, RCtrl, LWin, RWin, APPS]
      UWAGA !!!
      Deklaracji KeySpec można używać, aby stworzyć akcję dla klawisza już
      zdefiniowanego (poleceniem KEY) ale z modyfikatorem:
      {KEY 65,30,0}<run notepad.exe>
      {KEYSPEC 65,30,0, lShift}<run mspaint.exe>
      W powyższym przypadku NIGDY mspaint.exe nie zostanie uruchomiony,
      ponieważ zawsze pierwsze będzie brane pod uwagę polecenie KEY. W takim
      przypadku należy najpierw napisać polecenie KEYSPEC, a później KEY:
      {KEYSPEC 65,30,0, lShift}<run mspaint.exe>
      {KEY 65,30,0}<run notepad.exe>


    - {MouseMove gest} -> deklaracja gestu
      "Gest" jest to lista ruchów myszki, które trzeba wykonać żeby dane
      zadania zostały wykonane. Podczas trzymania wciśniętego przycisku myszki
     
(zobacz opcja MouseMoveButton) należy wykonać zadeklarowany ruch.
      Podczas niego cały czas na pulpicie w okienku będą pokazywane wartości
      odpowiadające wykonanym już ruchom (oczywiście, jeżeli okienka te nie
     
będą wyłączone; opcja ShowWindows). Ruchy te dzielą się na konkretne
      kierunki (1-8). 
Wygląda to tak:
     
1  2  3  (1- lewo-góra; 2- góra; 3- prawo-góra)
     
4     5  (4- lewo; 5- prawo)
     
6  7  8  (6- lewo-dół; 7- dół; 8- prawo-dół)
      Przykładowy gest:
     
{MouseMove 7358}
      Spowoduje on, że po narysowaniu pierwiastka (no, mniej więcej ;)) nastąpi
      wykonanie wszystkich zadeklarowanych poleceń.

      --> WIELKIE DZIĘKI DLA SPOOKA ZA POMOC PRZY GESTACH !!! <--

    - {SystemIdle ile_sekund} -> deklaracja czasu bezczynności komputera
      "Ile_sekund" określa czas po jakim, przy bezczynności komputera, dane
      polecenia zostaną wykonane. Na podobnej zasadzie działa wygaszacz ekranu
     
(po X minutach włącza wygaszacz, wyłącza monitor, itp).

      Minimalna ilość sekund to 10.

    - {OnEvent zdarzenie} -> deklaracja poleceń na dane zdarzenie
      -> zdarzenie - zdarzenie na które mają zostać wykonane polecenia
        - CompBlockOn - zablokowanie komputera (przez Ducha)
        - CompBlockOff - odblokowanie komputera (przez Ducha)

    - {MouseButton przycisk} -> deklaracja klawisza myszki
      -> przycisk - nazwa przycisku myszki
        - LButton - lewy przycisk myszki
        - MButton - œrodkowy przycisk myszki
        - RButton - prawy przycisk myszki
      
UWAGA !!! Aby to działało musi być włšczona opcja MouseMoveOn !!!


 - <POLECENIE1> -> polecenie do wykonania

  Typy poleceń:
    - <Run ściezka_do_pliku|parametry> -> plik okreslony przez ściezka_do_pliku
                   zostanie uruchomiony z parametrami podanymi w "parametry";
                   można podać także ścieżkę do pliku innego niż EXE, a także
                   adres WWW lub inne polecenie; np: "mailto:kpawel@kr.onet.pl";
               w takim wypadku należy pominąć parametry


    - <Command komenda> -> uruchomienie wewnętrzenj komendy programu
      - <Command Block> -> blokowanie komputera (opis niżej)
      - <Command SilentBlock> -> blokowanie komputera bez pokazywania okna
      - <Command MouseMovesON> -> włącza gesty
      - <Command MouseMovesOFF> -> wyłącza gesty


    - <MapKey kod_ascii, mod> -> przemapowanie zdefiniowanego klawisza na klawisz
                                 o kodzie kod_ascii
      -> mod - modyfikatory:(porozdzielane przecinkami)
         [LAlt, RAlt, LShift, RShift, LCtrl, RCtrl, LWin, RWin, APPS]


    - <MapSpec mod> -> przemapowanie klawisza na klawisz specjalny
      -> mod - jakie klawisze ma emulować: (można łączyć kilka na raz)
         [LAlt, RAlt, LShift, RShift, LCtrl, RCtrl, LWin, RWin, APPS]
      -> MapSpec blokuje klawisz, który przemapowuje,
         więc nie działa opcja NieKasujKlawisza


    - <KeySend tytul, klasa, kod_ascii, mod> -> emuluje wcisnięcia klawisza do
                                                okna:
      -> tytul - tytuł okna
      -> klasa - nazwa klasy okna
         (musi być podany przynajmniej jeden z powyższych parametrów)
      -> kod_ascii - kod ASCII klawisza do "wciśnięcia"
      -> mod - modyfikatory:(porozdzielane przecinkami)
        [LAlt, RAlt, LShift, RShift, LCtrl, RCtrl, LWin, RWin, APPS]


    - <MessageSend tytul, klasa, Message, WParam, LParam> -> wysyła do okna
                                                         komunikat Windows:
      -> tytul - tytuł okna
      -> klasa - nazwa klasy okna
         (musi być podany przynajmniej jeden z powyższych parametrów)
      -> Message, WParam, LParam - dane do komunikatu (muszą to być wartości
         liczbowe)


    - <DonTBlockRepeat> -> podanie tej opcji spowoduje, że Duch nie będzie
      blokował powtarzania klawisza przy jego wciśnięciu (trzymaniu wciśniętym)

    - <DonTDelKey> -> nie kasuj klawisza przy wykonaniu (normalnie Duch
      wykonuje wszystkie polecenia i kasuje klawisz)

    - <Group gr> -> przyporzadkowuje dany klawisz do grupy "gr" (klawisz można
      przyporzadkować do kilku grup)

    - <SetGroup gr> -> ustawia bieżącą grupę na "gr"

    - <SetGroup> -> ustawia bieżącą grupę na pustą - tym samym włącza wszystkie
      klawisze

    - <OnlyIfLockON key> -> określa które klawisze LOCK muszą był włączone żeby
                            skrót działał:
      -> key - klawisze rozdzielone przecinkami:
        - NumLock
        - CapsLock
        - ScrollLock

    - <Volume zmiana_głośności, urządzenie_miksujące, wybór_głośności, sterownik_głośności>
      -> zmienia głośność podanego sterownika
      - zmiana_głośności: 1. liczba podająca zmianę głośności (ujemna zmniejsza
        głośność, dodatnia zwiększa); głośność jest z zakresu 0..65535;
        2. za zmiana_głośności można też wstawić 3 wartości tekstowe:
        - MuteOn     - włącza wyciszenie
        - MuteOff    - wyłącza wyciszenie
        - ChangeMute - zmienia stan wyciszenia na przeciwny (tzn jak wyciszenie jest włączone
          to je wyłącza; a jak jest wyłączone to włącza)

      - urządzenie_miksujące - numer (licząc od zera) urządzenia miksującego
      - wybór_głośności      - numer (licząc od zera) wyboru głośności
      - sterownik_głośności  - numer (licząc od zera) sterownika głośności

      Po kliknięciu "Wstaw polecenie" w programie DuchKonf pojawi się okienko w którym trzeba
      podać zmianę głosności, a pozostałe wartości można wybrać z listy.
      Powyższe 3 parametry są zależne od sprzętu. Aby je poprawnie ustawić
      należy otworzyć okno Regulacji głośności "Volume control" i wejść do
      właściwości (Opcje -> Właściwości). Na samej górze jest okienko wyboru
      urządzenia miksującego (przeważnie będzie tylko jedno do wyboru).
      Jako urządzenie_miksujące należy podać numer wybranego urządzenia
      (przeważnie będzie to 0). Wybór_głośności jest to drugi parametr
      okreslony jako "Ustawienie głośności" (Odtwarzanie, Nagrywanie,
      czasami też pole Inne jest dostępne). Ostatnią wartością do ustawienia
      jest sterownik_głośności. Jest to numer (licząc od zera) sterownika
      głośności czyli ostatniego okna we Właściwościach.


      UWAGA!!!
      Jeżeli chcesz mieć płynną zmianę głośności (podczas trzymania wciśniętych klawiszy)
      musisz zastosować
<DonTBlockRepeat>.

      Przykładowe zapisy:
      Zapis zwiększający o 1/10 głośność:
      <Volume 6553, 0, 0, 0>
      6553 - o ile zwiększyć głośność
      0 - urządzenie_miksujące
      0 - wybór_głośności
      0 - sterownik_głośności

      Zapis zmniejszający o 1/10 głośność:
      <Volume -6553, 0, 0, 0>
      -6553 - o ile zmniejszyć głośność
      0 - urządzenie_miksujące
      0 - wybór_głośności
      0 - sterownik_głośności

      Zapis zwiększający o 1/10 głośność wyjścia Wave:
      <Volume 6553, 0, 0, 1>
      6553 - o ile zwiększyć głośność
      0 - urządzenie_miksujące
      0 - wybór_głośności
      1 - sterownik_głośności

      Zapis wyciszający wyjście Wave:
      <Volume MuteOn, 0, 0, 1>
      MuteOn - wycisz
      0 - urządzenie_miksujące
      0 - wybór_głośności
      1 - sterownik_głośności

    - <WriteText Tekst> -> pisze Tekst w miejscu gdzie jest kursor
                           (wystukuje na klawiaturze)

    - <OpenCD litera_CD_ROMu> -> wysuwa tackę CD-ROMu
      Poprawne wywołanie:
      <OpenCD D>
        - gdzie D jest to litera napędu CD-ROM w Twoim komputerze

    - <CloseCD litera_CD_ROMu> -> zamyka tackę CD-ROMu

    - <Winamp2 polecenie> -> wysyła do Winampa (2.x) dane polecenie:
      POLECENIE       - CO ROBI
      - Prev          - poprzedni utwór
      - Next          - następny utwór
      - Play          - play
      - Pause         - pauza/koniec pauzy
      - Stop          - stop
      - FadeOutStop   - ścisz i stop
      - StopAfterCurr - skończ po tym utworze
      - FastForward5s - przewijanie: 5 sekund do przodu
      - FastRewind5s  - przewijanie: 5 sekund do tyłu
      - RaiseVol      - zwiększ poziom głośności o 1%
      - LowerVol      - zmniejsz poziom głośności o 1%
      - CloseWinamp   - zamknij Winampa
      - PlayAudioCD   - odtwarzaj płytę Audio
      - PlayPause     - Play/Pause
      - ShowTitle     - wyświetla w okienku tytuł aktualnie granego utworu

      Poprawne wywołanie:
      <Winamp2 Next>

      UWAGA !!!
      Duch obsługuje tylko Winampa w wersji < 3.0 (cała seria 2.x). Jeżeli
      masz Winampa3 i chcesz, żeby Duch z nim działał to musisz ściagnąć
      i zainstalować plugin "Winamp 2x Plugin Manager" ze strony:
      http://www.winamp.com/components3/detail.jhtml?componentId=118230
      Po jego instalacji i uruchomieniu (w ustawieniach) Duch będzie poprawnie
      sterował nowym Winampem.


    - <Mouse polecenie> -> wywołuje polecnie myszki:
      POLECENIE       - CO ROBI
      - LPress        - emuluje wciśnięcie lewego przycisku myszki
                        (wciśnięcie przycisku i zwolnienie)
      - MPress        - emuluje wciśnięcie środkowego  przycisku myszki
                        (wciśnięcie przycisku i zwolnienie)
      - RPress        - emuluje wciśnięcie prawego przycisku myszki
                        (wciśnięcie przycisku i zwolnienie)
                        
      - LDown         - emuluje wciśnięcie lewego przycisku myszki
                        (wciśnięcie przycisku; zwolnienie przy puszczeniu klawisza)
      - MDown         - emuluje wciśnięcie środkowego  przycisku myszki
                        (wciśnięcie przycisku; zwolnienie przy puszczeniu klawisza)
      - RDown         - emuluje wciśnięcie prawego przycisku myszki
                        (wciśnięcie przycisku; zwolnienie przy puszczeniu klawisza)
                        
      - Wheel xxx     - emuluje kręcenie kółka pionowego na myszce; xxx to wartość
                        liczbowa, o ile pikseli przesunąć
                        (wartość dodatnia - w górę, ujemna - w dół)
      - Move xxx,yyy  - przesuwa kursor myszki o podane wartości
                        xxx - zmiana pozycji w poziomie: wartość dodatnia
                        w prawo; ujemna w lewo
                        yyy - zmiana pozycji w pionie: wartość dodatnia
                        w dół; ujemna w górę

      Przykładowe wywołania:
      <Mouse LButton>
      <Mouse MButton>
      <Mouse RButton>
      <Mouse Wheel 100>
      <Mouse Move 10,-10>

      UWAGA !!!
      1. Różnica pomiędzy XPress, a XDown polega na tym, że polecnia XPress są to
      tylko "kliknięcia", a XDown trzymają wciśnięty klawisz myszki tak długo, jak
      długo jest trzymany wciśnięty klawisz na klawiaturze (pomocne przy emulowaniu
      zaznaczania myszką). Za to przy pomocy XPress można pod jeden klawisz podpiąć
      podwójne kliknięcie myszką (dwa polecenia XPress obok siebie ;)).
      2. Jeżeli chcesz, żeby po naciśnięciu klawisza czynność przypisana
      (np. ruch kursora) była wykonywana tak długo jak trzymasz klawisz,
      zastosuj polecnie
<DonTBlockRepeat>.

    - <WriteOnScreen tekst> -> napisanie podanego tekstu na pulpicie

    - <PlaySound plikWAV> -> odtwarza w tle zadany plik WAV. Podanie pustego pliku
                             powoduje zatrzymanie odtwarzanych dzwięków.

    - <WorkWhenCompIsBlocked> -> wszystkie polecenia dla danego klawisza zostaną wykonane
                             nawet wtedy gdy komputer będzie zablokowany.
                             (opcja przydatna np. przy sterowaniu Winamp'em ;))
 
    - <Tlen.polecenie parametry> -> wykonuje polecenie dla komunikatora Tlen
      (MUSI BYĆ ZAINSTALOWANA WTYCZKA W TLENIE - DUCH_TLEN.TPL)
      (między Tlen a poleceniem jest KROPKA !!!)
      POLECENIE      - CO ROBI
      - SetStatus    - ustawia status w tlenie
         Parametry:
          protokół,status,czy_zmieniać_opis,opis
          -> protokół - GG lub TLEN; narazie innej mozliwości nie ma ;)
          -> status - numer nowego statusu (liczba z zakresu 1..7)
          -> czy_zmieniać_opis - znacznik, czy zmieniać opis czy pozostawić obecny
             wartość 0 - zmień; inna liczba - pozostaw bieżący
          -> opis - nowy opis (jeżeli czy_zmieniać_opis = 0)
             (aby uzyskać znak nowej linii należy użyć \n)
 
        Przykładowe wywołania:
         <Tlen.SetStatus TLEN,2,0,Już wróciłem ;)\nNareszcie w domu.>
         <Tlen.SetStatus ,4,1,>
      
      - BroadcastMsg - wysyła komunikat do wszystkich osób z którymi właśnie rozmawiamy
                       (czyli do każdego otwartego okna rozmowy)
         Parametry:
          Wiadomość
          -> Wiadomość - treść wiadomości, która zostanie wysłana
             (aby uzyskać znak nowej linii należy użyć \n)

        Przykładowe wywołania:
        <Tlen.BroadcastMsg Zaraz wracam>
        <Tlen.BroadcastMsg Będę później\nNie ma mnie.>
      
      - Plug - uruchamia daną funkcję danego pluginu                       
         Parametry:
          NazwaPluginu Dane
          -> NazwaPluginu - nazwa wtyczki której funkcję nalezy wywołać
          -> Dane - jakieśtam dane (nazwa funckji, parametry)
             więcej informacji w opisach do wtyczek

        Przykładowe wywołania:
        <Tlen.Plug AutoStatus SetProfil Tralala>

    - <IE polecenie> -> wykonuje polecenie dla przeglądarki IE (przeglądarka MUSI być aktywnym oknem):
      POLECENIE       - CO ROBI
      - Navigate:URL  - przechodzi do strony URL
      - GoForward     - dalej
      - GoBack        - wstecz
      - GoHome        - strona główna
      - Stop          - stop
      - Refresh       - odśwież bieżącą stronę
      - Search        - szukaj
      - FullScreen    - włącza/wyłącza tryb FullScreen
      - TheaterMode   - włącza/wyłącza tryb TheaterMode

      Przykładowe wywołania:
      <IE GoBack>
      <IE Navigate:www.onet.pl>

    - <OnlyIfTopWindow tytul, klasa> -> wszystkie polecenia dla danego klawisza zostaną wykonane
                             tylko wtedy gdy aktywnym oknem będzie to zdefiniowane przez
                             "tytul" i "klasa";
      -> tytul - tytuł okna
      -> klasa - nazwa klasy okna
      Wystarczy podać tylko jedną wartość.

    - <OnlyIfTopProgram ścieżka_exe> -> wszystkie polecenia dla danego klawisza zostaną wykonane
                             tylko wtedy gdy aktywnym oknem będzie okno programu ścieżka_exe.
      -> ścieżka_exe - ścieżka do pliku exe

    - <PulpitIconsVisible widoczne> -> pokazanie/ukrycie ikon pulpitu                           
      -> widoczne - SHOW lub HIDE

    - <MenuStartVisible widoczne> -> pokazanie/ukrycie paska Menu Start                           
      -> widoczne - SHOW lub HIDE


Jeżeli żadne polecenie nie jest napisane, a klawisz będzie zadeklarowany to
klawisz ten będzie wyłaczony (patrz "przykładowy plik konfiguracyjny": ALT+TAB).

--------------------------------------------------------------------------------
OPCJE PROGRAMU:
każda linijka składa się z części:
nazwa_opcji=wartość

nazwa_opcji:

Password -> hasło, które trzeba wpisać na klawiaturze, gdy komputer
jest zablokowany (blokowanie komputera -> opis niżej)
przykład:
Password=1234


DfGroup -> ustawia domyślną grupę (tą, która będzie aktywna po
włączeniu programu)
jeżeli chcesz, żeby po właczeniu programu domyślną grupą
była grupa pusta, pomiń tą opcję 
przykład:
DfGroup=GRUPA 1


ShowWindows -> określa czy program pokazuje okienka w dolnym prawym rogu ekranu 
           (np. przy sterowaniu Winampem, zmianie grupy czy zmianie głośności)
           Przyjmuje wartości: TAK lub NIE  (domyślnie jest TAK)
przykład:
ShowWindows=TAK


WindowDistX -> określa odległość (w pikselach) okienka od prawej krawędzi ekranu            
przykład:
WindowDistX=0


WindowDistY -> określa odległość (w pikselach) okienka od dolnej krawędzi ekranu 
przykład:
WindowDistY=0


WindowShowTime -> określa jak długo okienko ma być wyświetlane (w milisekundach);
           (1000 ms = 1 sekunda)
przykład:
WindowShowTime=1500


MouseMoveButton -> określa który przycisk myszki służy do wywołania gestu;
           [LButton, MButton, RButton] (domyślnie jest MButton)
przykład:
MouseMoveButton=MButton


MouseMoveON -> podanie tej opcji spowoduje, że gesty zostaną właczone przy
               uruchomieniu programu (domyślnie są wyłączone). Gesty można
               właczać i wyłączać komendami MouseMovesON i MouseMovesOFF)
przykład:
MouseMoveON


--------------------------------------------------------------------------------
IKONY
Czasami podczas działania programu pojawiają się ikonki (np. przy sterowaniu
Winampem) [jeżeli nie są wyłączone: patrz Opcje, polecenie ShowWindows]. Istnieje
mozliwość ich zmiany. Wszystkie te ikony znajdują się w podkatalogu Ikony.
Wystarczy zmienić je na swoje. Po zmianie którejkolwiek ikony nie trzeba restartować
Ducha. Usunięcie którejkolwiek ikony spowoduje, że przy przydzielonej jej akcji nie
będzie wyświetlane nic.

Lista obrazków w podkatalogu Ikony:
Winamp_Prev.bmp             - Previous track
Winamp_Next.bmp             - Next track
Winamp_Play.bmp             - Play
Winamp_Pause.bmp            - Pause/Unpause
Winamp_Stop.bmp             - Stop
Winamp_FadeOutStop.bmp      - Fadeout and stop (Ścisz i stop)
Winamp_StopAfterCurrent.bmp - Stop after current track
Winamp_FastForward.bmp      - Fast-forward 5 seconds
Winamp_FastRewind.bmp       - Fast-rewind 5 seconds
Winamp_RaiseVolume.bmp      - Raise volume by 1%
Winamp_LowerVolume.bmp      - Lower volume by 1%
Winamp_PlayAudioCD.bmp      - Play audio CD

vol_panel.bmp               - Tło panelu głośności
vol_button.bmp              - Suwak
vol_mute.bmp                - Ikonka wyciszenia

UWAGA !!!
1. Przy tworzeniu/modyfikowaniu bitmap należy pamiętać, że jeden kolor będzie kolorem

"przeźroczystym". Kolor ten jest pobierany z piksela znajdującego się w dolnym lewym
bitmapy.

2. Pliki ikon nie mogą być większe niż 50 KB !!!
--------------------------------------------------------------------------------
PROGRAM KONFIGURACYJNY (DuchKonf.exe):
Program ten słuzy do konfiguracji Ducha. Aby uruchomić ten program należy
najpierw uruchomić Ducha. W pierwszym oknie pojawiają się kody wciskanych
klawiszy (już w takiej kolejności w jakiej trzeba je wpisać do pliku
konfiguracyjnego). Drugie okno to zawartość pliku konfiguracyjnego.
Opcje górnego okna:
 - "Wyczyśc listę" - czyści okno kodów klawiszy
 - "Zablokuj dodawanie kodów" - nie dodaje do tej listy kodów właśnie
   wciskanych klawiszy
 - "Zablokuj przetwarzanie klawiszy" - całkowicie blokuje klawiaturę
   (można wtedy zobaczeć jakie kody mają kombinacje ALT+F4, itp.)

Opcje dolnego okna:
 - "Zastosuj zmiany" - zapisuje zmiany do pliku i automatycznie zastosowuje się
   do nich

 - menu kontekstowe z wszystkimi poleceniami: należy kliknąć prawym klawiszem
   myszki na dolnym okienku
--------------------------------------------------------------------------------
BLOKOWANIE KOMPUTERA:
Duch umożliwia zablokowanie komputera, bez ukrywania zawartości ekranu.
Aby zdefiniowac klawisz, który będzie blokował komputer należy jako
POLECENIE podać <Block> (patrz DEKLARACJE KLAWISZY).
Żeby mozna było zablokować komputer potrzebne jest także hasło,
które trzeba ustawić (patrz OPCJE PROGRAMU).

UWAGA !!!
 - WPISUJĄC HASŁO NIE NALEŻY PODAWAĆ ZNAKÓW WYMAGAJĄCYCH WCIŚNIĘCIA
   KLAWISZY SPECJALNYCH (ALT, CTRL, SHIFT);
 - ABY ODBLOKOWAĆ KOMPUTER NALEZY PODAĆ DOKŁADNIE TAKIE SAMO HASŁO
   (WIELKOŚĆ LITER NIE MA ZNACZENIA);
 - NIE MA HASŁA "SERWISOWEGO". JEŻELI NIE ZAPAMIETAŁEŚ HASŁA 
   TO POZOSTAJE RESET... ;(.

Aby zmienić hasło należy wpisać je do pliku a nastepnie ZRESETOWAĆ Ducha
(reszta ustawień wymaga kliknięcia ZASTOSUJ w programie DuchKonf).

--------------------------------------------------------------------------------
ABY ZAMKNĄĆ DUCHA:
Nalezy ponownie uruchomić plik Duch.exe i odpowiedzieć TAK na pytanie lub
uruchomić plik Duch.exe z parametrem /CLOSE.

--------------------------------------------------------------------------------
DUCHDLL.DLL:
Jest to biblioteka pokazująca okienko, gdy komputer zostanie zablokowany
Wygląd okienka jest czytany z pliku: DuchDLL.bmp lub DuchDLLT.bmp.
Oba pliki to zwykłe bitmapy, jednak w przypadku drugiego pliku
program potraktuje obrazek jako bitmapę transparentną (tzn., jeden kolor
będzie przeźroczysty; kolor ten zostanie pobrany z piksela w dolnym, lewym rogu
bitmapy). Sposób wybierania obrazków jest prosty: jeżeli w katalogu Ducha będzie
się znajdował plik DuchDLL.bmp to zostanie on wybrany jako obrazek. W przypadku
jego braku, program sprawdzi czy istnieje plik
DuchDLLT.bmp. Jeżeli tak to
zostanie wybrany, jeżeli nie - nie zostanie wyświetlone nic.


Jeśli chcesz - możesz sam napisać tę bibliotekę.
Wadą oryginalnej jest jej wielkość. Nie mam czasu tego poprawić.
Jednak jeżeli masz chęć i czas to: musisz napisać DLLa, który eksportuje
3 procedury:
 - ShowWindow;
 - HideWindow;
 - RefreshWindow;
dodatkowo może eksportować procedurę:
 - MoveWindow(const nX, nY : Integer);

Każda z tych procedur musi mieć klauzulę STDCALL (tak jest w Delphi).

Działania:
 - ShowWindow - jest uruchamiana gdy trzeba pokazać okno (w momencie blokowania
   komputera);
 - HideWindow - uruchamiana, gdy trzeba zamknąć okno (przy odblokowywaniu
   komputera)
 - RefreshWindow - wywoływana zawsze, gdy forma otrzyma WM_PAINT;
   w tej procedurze trzeba odświezyć formę
 - MoveWindow - wywoływana zawsze, gdy użytkownik poruszy myszką;
   w tej procedurze można obsłużyć przesuwanie formy razem z ruchem myszki
   (nowa pozycja kursora jest podawana w nX i nY).

Żeby biblioteka działała z Duchem to musi eksportowac 3 pierwsze procedury
(ShowWindow, HideWindow i RefreshWindow).
--------------------------------------------------------------------------------
I to już jakby koniec...
Mam nadzieję, że ta "instrukcja" była w miarę zrozumiała ;-))
Jeżeli nie to proszę o maila - postaram się wytłumaczyć co i jak i ewentualnie
poprawić ten opis.