Chciałbym odfiltrować wejście klawiatury na drugiej klawiaturze i uniemożliwić kluczowym zdarzeniom dla drugiej klawiatury dotarcie do systemu operacyjnego (obsłużyć je osobiście). Jak to zrobić?Filtr HID OSX do drugiej klawiatury?
Odpowiedz
Można to zrobić za pomocą IOKit i klasy HIDManager.
Jeśli wymagany jest wyłączny dostęp do klawiatury, można użyć opcji kIOHIDOptionsTypeSeizeDevice
, ale program będzie musiał działać z uprawnieniami roota.
Namiastka kodu potrzebnego do uzyskania tego wyniku jest przedstawiony poniżej:
// Create a manager instance
IOHIDManagerRef manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDManagerOptionNone);
if (CFGetTypeID(manager) != IOHIDManagerGetTypeID()) {
exit(1);
}
// Setup device filtering using IOHIDManagerSetDeviceMatching
//matchingdict = ...
IOHIDManagerSetDeviceMatching(manager, matchingdict);
// Setup callbacks
IOHIDManagerRegisterDeviceMatchingCallback(manager, Handle_DeviceMatchingCallback, null);
IOHIDManagerRegisterDeviceRemovalCallback(manager, Handle_RemovalCallback, null);
IOHIDManagerRegisterInputValueCallback(manager, Handle_InputCallback, null);
// Open the manager and schedule it with the run loop
IOHIDManagerOpen(manager, kIOHIDOptionsTypeSeizeDevice);
IOHIDManagerScheduleWithRunLoop(manager, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
// Start the run loop
//...
Bardziej szczegółowe informacje można znaleźć w docs firmy Apple tutaj: http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html
Kompletny kod użyłem do mojego Aplikację można znaleźć tutaj: https://gist.github.com/3783042
Mam zamiar to zrobić, ale bez pisania własnego sterownika, nie można przechwycić bufora. Ma to na celu zapobieganie keyloggerom i innym złośliwym programom. Wszystko musi przejść przez system operacyjny.
Nieprawidłowo: Możesz użyć interfejsu użytkownika HID i kIOHIDOptionsTypeSeizeDevice, aby uzyskać wyłączny dostęp do urządzenia bez potrzeby używania kext. Jeśli nie potrzebujesz wyłącznego dostępu, program nie musi nawet działać z uprawnieniami roota. – GaretJax
Jestem w błędzie, powinieneś opublikować jako odpowiedź, ale w samodzielnym kształceniu znalazłem, że wymaga on dostępu rootowego tylko do klawiatur. – AnthonyFG
Masz rację, ale tylko dla wyłącznego dostępu, jak już napisałem w moim komentarzu;) – GaretJax
- 1. Rejestr zdarzeń drugiej klawiatury
- 2. Lista kodów skanowania klawiatury hex i dokumentacja klawiatury USB HID
- 3. Jak mogę wykorzystać kluczowe zdarzenia tylko na klawiaturze z określonym HID w Mac OSX?
- 4. Konieczność przechwycenia zdarzeń klawiatury HID (a następnie ich zablokowanie)
- 5. Tworzenie wirtualnego urządzenia HID
- 6. CreateFileA nie otwiera urządzenie HID w Windows
- 7. Python evdev odpowiednik dla OSX
- 8. .NET API dla HID (USB)?
- 9. przewijania do miękkiej klawiatury
- 10. Czy mogę używać języka Python do przechwytywania zdarzeń klawiatury i myszy w systemie OSX?
- 11. Jakie są odpowiednie klawisze klawiatury do działań Google Glass touchpad?
- 12. Surowy dostęp do urządzeń HID w systemie OS X
- 13. Android zarejestrować połączenie do systemu Windows jako klienta HID
- 14. Używanie Androida do komunikowania się za pomocą urządzenia USB HID
- 15. Sterownik myszy innej niż HID na NT
- 16. USB HID wisi na Odczyt() w C#
- 17. Nieprawidłowa suma kiedy dołączyć do drugiej tabeli
- 18. Filtr serwletów do buforowania przeglądarki?
- 19. Program wiersza polecenia systemu Windows drugiej firmy?
- 20. Przekazywanie danych z jednej aktywności do drugiej przy użyciu pakunku - brak wyświetlania w drugiej aktywności
- 21. Typ wejściowy klawiatury klawiatury iOS z przecinkiem
- 22. Filtr wielopoziomowy obejmuje filtr z LoopBack JS
- 23. mangusta równa drugiej wartości
- 24. Filtr String
- 25. Jak zmusić win10 do otwierania wirtualnej klawiatury?
- 26. Android Ekran logowania do Facebooka bez klawiatury
- 27. Przewiń do końca FlatList po wyświetleniu klawiatury
- 28. Używanie Applescript do wykonania skomplikowanego klawisza klawiatury
- 29. Dodanie poprawnej obsługi klawiatury do RecyclerView
- 30. writeToFile w OSX, dołączanie do pliku?
Wielkie dzięki! Nie wiem jak, ale nie otrzymałem powiadomienia, że odpowiedź na to pytanie. Cieszę się, że w końcu wiem, jak to zrobić. Wypróbowałem twój przykładowy kod i zadziałało jak czar. – JayGee