Vorrei filtrare l'input da tastiera su una seconda tastiera e impedire che gli eventi dei tasti per quella seconda tastiera raggiungano il sistema operativo (gestirli personalmente). Come si può fare?Filtro HID OSX per tastiera secondaria?
risposta
È possibile utilizzare IOKit e la classe HIDManager.
Se si desidera l'accesso esclusivo alla tastiera, è possibile utilizzare l'opzione kIOHIDOptionsTypeSeizeDevice
, ma il programma dovrà essere eseguito con privilegi di root.
Uno stub del codice necessario per ottenere questo risultato è mostrato sotto:
// 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
//...
Informazioni più dettagliate si possono trovare nella documentazione di Apple qui: http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html
Il codice completo che ho usato per il mio l'applicazione può essere trovata qui: https://gist.github.com/3783042
Ho intenzione di fare un tentativo in questo, ma non di scrivere il tuo autista, non puoi intercettare il buffer. Questo è per prevenire keylogger e altri programmi dannosi. Tutto deve andare attraverso il sistema operativo.
Errore: è possibile utilizzare l'interfaccia HID userland e kIOHIDOptionsTypeSeizeDevice per ottenere l'accesso esclusivo a un dispositivo senza la necessità di un kext. Se non hai bisogno di un accesso esclusivo, il programma non deve nemmeno essere eseguito con i privilegi di root. – GaretJax
Ho torto, dovresti postare come risposta, ma in auto-apprendimento ho scoperto che richiede l'accesso root solo per le tastiere – AnthonyFG
Hai ragione, ma solo per l'accesso esclusivo, come ho già scritto nel mio commento;) – GaretJax
- 1. Come posso consumare eventi chiave solo su una tastiera con un HID specifico in Mac OSX?
- 2. Come toccare/gancio eventi della tastiera in OSX e segnare i tastiera incendi ogni evento
- 3. Determinazione dell'interfaccia HID da POS o da tastiera in C++
- 4. Dispositivo HID USB Android
- 5. Filtro input board tastiera Javascript
- 6. Elenco dei codici di scansione tastiera esadecimale e documentazione tastiera USB HID
- 7. API .NET per HID (USB)?
- 8. Descrittore report HID (con iPhone)
- 9. App per desktop di Windows 8: apri tabtip.exe alla tastiera secondaria (per casella di testo numerica)
- 10. Domanda protocollo HID USB
- 11. È necessario intercettare gli eventi della tastiera HID (e quindi bloccarli)
- 12. Come catturare l'input HID raw su linux?
- 13. Come associare e connettere a livello di codice un dispositivo bluetooth HID (tastiera Bluetooth) su Android
- 14. Accesso diretto agli eventi della tastiera in OSX
- 15. Aggiunta di una visualizzazione secondaria per UIButton
- 16. Rotolo il mio driver HID per joystick di Windows?
- 17. equivalente ltrace per osx?
- 18. equivalente OSX per IP_RECVERR
- 19. TDD per un'applicazione OSX
- 20. Posso usare Python per catturare eventi di tastiera e mouse in OSX?
- 21. Driver mouse non HID su NT
- 22. Scorciatoia da tastiera "Tasto destro" per Eclipse?
- 23. C'è una scorciatoia da tastiera per cancellare un filtro nei navigatori a sinistra in XCode?
- 24. SVN server per Mac OSX
- 25. Building glew per Mac OSX
- 26. popup OSX per trovare FinderSyncAPIExtension
- 27. Problemi con chiave secondaria di data.table
- 28. Tastiera split per iPad
- 29. filtro Django per ora
- 30. filtro jquery per css
Molte grazie! Non so come, ma non ho ricevuto la notifica che questa domanda ha avuto risposta. Sono felice di sapere finalmente come fare questo. Ho provato il tuo codice di esempio e ha funzionato come un fascino. – JayGee