2012-09-01 11 views
6

Piszę program Linux w C, i muszę przechwycić niektóre uderzenia klawiatury.Jak skompilować zdarzenie klawiatury w systemie Linux za pomocą podsystemu wejściowego

Korzystając z podsystemu wejściowego (odczyt/zapis/dev/wejście/zdarzenieX), mogę otrzymać skok klawiatury (używając funkcji "odczyt") lub symulować skok klawiatury (używając funkcji "zapis").

Podczas korzystania z funkcji "Odczyt", mogę przechwytywać uderzenia klawiatury użytkownika, ale zdarzenie to jest propagowane i nie wiem, jak je wykorzystać.

+0

Demo kody: int devfd = open (urządzenie, ...);/* Otwórz urządzenie kernel "/ dev/input/eventX". */ odczyt (devfd, ...);/* Przeczytaj wydarzenie na klawiaturze. */ write (devfd, ...);/* Symuluj wydarzenie na klawiaturze. */ – zccoding

+2

Nie ma potrzeby komentowania własnego pytania. Możesz edytować pytanie, aby dołączyć dalsze szczegóły i sformatować źródło. Upewnij się, że twoje źródło jest jasne dla tych, którzy odpowiedzą. – bytebuster

Odpowiedz

5

Domyślnie zdarzenia wejściowe są przesyłane do wszystkich aplikacji słuchających i sterowników. Możliwe jest jednak, że aplikacja pobiera urządzenie za pośrednictwem interfejsu evdev - spójrz na EVIOCGRABioctl(). Pozwoliłoby to tylko tej konkretnej aplikacji na odbieranie zdarzeń z tego konkretnego urządzenia.

Problem z tego podejścia jest to, że nie można rzeczywiście zapobiec konkretne zdarzenie przed propagowane po jego otrzymaniu - można tylko chwycić urządzenie wcześniej, które następnie uchwycić wszystkie wydarzenia. Dlatego jeśli chcesz wprowadzić zdarzenia wejściowe filtr, musisz użyć obejścia.

Rozwiązaniem, które użyłem w moim evmapd demon zaangażowany chwytając oryginalne urządzenie i za pomocą uinput podsystem w celu zapewnienia innego urządzenia ze wszystkimi modyfikacjami, że muszę, w tym odwzorować klawiszy i różnych innych zmian ...

Powiązane problemy