Strony

piątek, 10 kwietnia 2015

Przechwyt klawiatury w Delphi

Wstęp



     Programowanie w języku Delphi umożliwia nie tylko tworzenie programów, ale także sterowanie podzespołami komputera takimi, jaki monitor, napęd CD\DVD, czy porty szeregowe i równoległe. Zwiększa to znacznie możliwości dla naszych projektów, dzięki czemu możemy z nimi wyjść na zewnątrz komputera.

zakładanie hooka na klawiaturę


     Nieodzownym elementem większości programów jest interfejs i sterowanie. To dzięki nim użytkownik może realizować swoje zamierzenia, wykorzystując do tego program. Przeważnie odbywa się to za pomocą klikania myszką w wirtualny przycisk, umieszczony na interfejsie programu. Jest to wygodne rozwiązanie dla zwykłych (graficznych) programów komputerowych. Co jednak zrobić w przypadku, gdybyśmy chcieli stworzyć jakiś mobilny projekt, na przykład poruszającego się robota? Chodzenie za nim i uważanie, aby nas nie rozjechał podczas klikania w jego interfejs, nie wchodzi przecież w rachubę. Musimy stworzyć sterowanie jego funkcjami na innej zasadzie.


     Pierwszym, najbardziej naturalnym rozwiązaniem tej kwestii jest klawiatura. Jeżeli użyjemy na dodatek klawiatury bezprzewodowej, mamy w pełni mobilną jednostkę. Nie jest to jednak takie proste. Co prawda klawiatura posiada wystarczająco dużo klawiszy, a w połączeniu ze skrótami klawiaturowymi (czyli naciśnięcie kilku klawiszy jednocześnie) ma ich całą masę (kilkaset), jednak każdy z nich ma swoje przeznaczenie. Nie możemy więc ich wykorzystać w sposób bezpośredni.


    Narzędzia programistyczne radzą sobie jednak doskonale z tego typu problemami. Klawiatura komunikuje się z komputerem, wysyłając doń komunikat, który klawisz został naciśnięty. Na podstawie uzyskanych informacji, komputer wykonuje zadanie przypisane do tego klawisza. Jeżeli, powiedzmy, naciśniemy klawisz z literką „a” nic się nie stanie, gdyż system z niego nie korzysta. Wystarczy jednak uruchomić jakikolwiek edytor tekstu (chociażby WordPad), aby przekonać się, że ten klawisz jest jednak potrzebny.


     Chcąc wykorzystać poszczególne klawisze do swoich celów lub zmienić ich przeznaczenie, musimy przechwycić komunikaty, które są wysyłane do komputera. Po ich przechwyceniu, wydajemy komputerowi własne komendy. Nic więc nie stoi na przeszkodzie, aby komputer po naciśnięciu klawisza „a” wykonał jakąś czynność, odtworzył muzykę lub na przykład, wyłączył się. Powyższy zabieg nazywamy przechwytem klawiatury lub, częściej, z anglojęzycznego oryginału, hookiem: zakładaniem hooka na klawiaturę.





Hook



     Przy pomocy hooka możemy przejąć kontrolę nad każdym klawiszem klawiatury oraz utworzyć skróty klawiaturowe z wykorzystaniem klawiszy rozszerzonych, czyli Ctrl, Alt, Shift, Win, a nawet ich kombinacje, jak ctrl+alt+klawisz. Czym zatem jest ów hook? Jest to procedura, jedna z wielu, która odbiera od klawiatury informacje o tym, jaki klawisz lub klawisze zostały naciśnięte i na tej podstawie wykonuje działanie, które dla tego przypadku wcześniej zdefiniowaliśmy.

Hook to nie jest tylko jedna procedura. Jest to raczej ogólna nazwa procesu przechwytywania klawiatury, a konkretnych procedur, które to realizują, jest kilka. Zazwyczaj uzupełniają się one wzajemnie. Przedstawimy trzy oddzielne procedury, które przechwytują klawiaturę. Oto one: 

- Key Press, 


     Każda z tych procedur króluje w pewnym, swoim tylko zakresie, lecz połączone razem, doskonale się uzupełniają. Poniższa tabela przedstawia możliwości poszczególnych procedur:


Zakładanie hooka w Delphi


Zakładanie hooka w Delphi

Zakładanie hooka w Delphi


     Analizując tabelę, widzimy jasno, jak wielkie możliwości sterowania kryje klawiatura. Każda z tych komórek to potencjalnie kolejny sposób sterowania jedną z opcji naszego programu czy robota. Jak widzimy, jest ich bardzo wiele.


     Dobrą właściwością hooka jest to, iż nie przejmuje automatycznie kontroli nad całą klawiaturą, lecz nad każdym z klawiszy z osobna. Możemy więc przechwycić tylko te klawisze, które chcemy. Ten wybiórczy sposób traktowania klawiatury przydaje się, gdy poza naszym zdefiniowanym działaniem, chcemy korzystać z dotychczasowych możliwości klawiszy, czyli na przykład używać klawisza Enter, Backpace czy chociażby klawiszy liter. Opiszemy teraz te trzy sposoby przechwytywania klawiatury w sposób szczegółowy.

    W dalszych częściach zapoznamy się dokładnie z poszczególnymi metodami. 

                        Strona    1/5    Dalej >

Artykuł pochodzi z mojej książki pt. "Delphi w przykładach dla początkujących". Zapraszam na Stronę książki.

poradnik programowania Delphi


Brak komentarzy:

Prześlij komentarz