rubinetti Evento: risultati variabili con CGEventPost, kCGSessionEventTap, kCGAnnotatedSessionEventTap, CGEventTapPostEvent

StackOverflow https://stackoverflow.com/questions/553284

Domanda

Io corro in un problema spinoso con distacco un evento da un rubinetto evento. Sto toccando per NSSystemDefined a kCGHIDEventTap, poi sostituendo l'evento con uno nuovo. Il problema che sto correndo per è che a seconda di come vi posto l'evento, è di essere visto solo da alcune applicazioni. Le mie applicazioni di test sono Opera, Firefox, Quicksilver, e Xcode. Qui ci sono le diverse tecniche che ho provato nel mio rubinetto evento di richiamata, con risultati. Mi aspetto un'azione (la "risposta corretta") da ogni app; "Beep di sistema" si intende il nulla-è-legato-a-che-chiave suono di sistema.

  1. Crea un nuovo evento, e restituirlo a partire dalla richiamata. Opera: no beep di risposta / sistema, Firefox: nessun segnale acustico di risposta / sistema, Quicksilver: risposta corretta, Xcode: nessun segnale acustico di risposta / Sistema

  2. Crea un nuovo evento, posta a kCGSessionEventTap con CGEventPost, restituire null. Opera: no beep di risposta / sistema, Firefox: nessun segnale acustico di risposta / sistema, Quicksilver: risposta corretta, Xcode: nessun segnale acustico di risposta / Sistema

  3. Crea un nuovo evento, posta a kCGAnnotatedSessionEventTap con CGEventPost, restituire null. Opera: risposta corretta, Firefox: risposta corretta, Quicksilver: nessuna risposta / beep di sistema, Xcode: nessun segnale acustico di risposta / Sistema

  4. Crea un nuovo evento, post con CGEventTapPostEvent, restituire null. Opera: no beep di risposta / sistema, Firefox: nessun segnale acustico di risposta / sistema, Quicksilver: risposta corretta, Xcode: nessun segnale acustico di risposta / Sistema

  5. Crea un nuovo evento, posta a kCGSessionEventTap con CGEventPost, e restituire nuovo evento. Opera: no beep di risposta / sistema, Firefox: nessun segnale acustico di risposta / sistema, Quicksilver: risposta corretta, Xcode: nessun segnale acustico di risposta / Sistema

  6. Crea un nuovo evento, posta a kCGAnnotatedSessionEventTap con CGEventPost, e restituire nuovo evento. Opera: risposta corretta e segnale acustico del sistema, Firefox: corretta risposta e segnale acustico del sistema, Quicksilver: corretta risposta e segnale acustico del sistema, Xcode: nessuna risposta / doppio beep di sistema

  7. Crea un nuovo evento, inviare con CGEventTapPostEvent, e restituire nuovo evento. Opera: no beep di risposta / sistema, Firefox: nessun segnale acustico di risposta / sistema, Quicksilver: risposta corretta, Xcode: nessun segnale acustico di risposta / Sistema

(6) è la migliore, ma gli utenti si lamentano del segnale acustico del sistema extra su risposte corrette, che sto cercando di indovinare che sta arrivando dalla doppia-posting della manifestazione. Non sono sicuro di altre combinazioni da provare, o dove altro guardare. Chiunque può offrire alcuna guida? C'è un modo per ottenere i risultati di entrambi il ritorno della manifestazione dal mio richiamo e la pubblicazione al rubinetto annotato senza fare entrambe le cose?

Ci scusiamo per il lungo domanda; Ho fatto un sacco di sperimentare.

Grazie in anticipo


Aggiornamento: questo è il codice che ho utilizzato per creare il rubinetto evento:

CFMachPortRef eventTap;
eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, 0,CGEventMaskBit(NX_SYSDEFINED) | (1 << kCGEventKeyDown) | (1 << kCGEventKeyUp), myCGEventCallback, (void *)hidEventQueue);
È stato utile?

Soluzione

Credo di aver risolto questo. Avevo usato +[NSEvent keyEventWithType:location:modifierFlags:timestamp:windowNumber:context:characters:charactersIgnoringModifiers:isARepeat:keyCode:] di creare un NSEvent, per poi tornare -CGEvent di quel evento. Ho passato a CGEventCreateKeyboardEvent, utilizzando l'origine evento creato dall'evento originale con CGEventCreateSourceFromEvent, e restituendo l'evento dal callback. Tutti i miei test passano ora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top