He instalado un gancho de teclado:¿Cómo diferenciar entre un evento de teclado tocado por el usuario y uno generado?
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
Básicamente quiero tomar grifos de teclado del usuario, coma la entrada, y después de mi propia entrada en lugar.
Así que si toca "g", me gustaría publicar "foo" en el campo de texto.
estoy escribiendo para el campo de texto con CGEventPost
y CGEventSetUnicodeString
como se encuentra aquí: http://www.mail-archive.com/[email protected]/msg23343.html
El problema es que cada uno de mis caracteres introducidos mediante programación está golpeando el gancho de teclado. Así que no puedo return NULL
en el gancho del teclado para bloquear la entrada del usuario ... ¡que también bloquea toda la entrada del programa!
que las diferenciaban en el lado de Windows en C# con la bandera 'inyecta', ver mi pregunta hace un año aquí: How do I use low-level 8 bit flags as conditionals?
Buscando algo similar en Objective-C.
Hmm, la La edición 'rápida y sucia' de MouseEventPressure como se muestra me da el siguiente: kCGErrorIllegalArgument: CGEventSetIntegerValueField: evento no válido –
cksubs
@cksubs: ¿Intentó la forma real que mencioné, utilizando el campo de datos del usuario para el origen del evento? –
Tendré otro vistazo a eso esta noche. Me quedé atrapado con eso cuando originalmente hice la pregunta, pero no puedo recordar por qué en este momento. ¿Tienes alguna idea sobre ese error? http://stackoverflow.com/questions/7102883/using-cgeventsetintegervaluefield-to-edit-a-keyboard-event-gives-error – cksubs