usar teclado sierra sesion para pantalla mayusculas mac inicio iniciar high descargar cómo como activar cocoa macos keyboard driver keyboard-events

cocoa - sesion - teclado en pantalla mac sierra



Cómo crear un teclado virtual en osx? (2)

Quiero crear un teclado virtual en osx. ¿Es posible? Quiero decir, ¿puedo hacer un programa que dé las mismas señales que el teclado real? Ejemplo de este tipo de teclado sería el teclado en pantalla o el visor de teclado (¿tiene la interfaz necesaria por cierto).

¿Qué tan bajo debería comenzar? ¿Debo hacer un controlador de dispositivo, por ejemplo, un teclado virtual (inalámbrico)? ¿O el cacao, etc., tiene las cosas necesarias?

Los requisitos que tengo son:
- una lista de tuplas (time, key_down / key_up, key_code) corresponde a la persona que tipea
- El teclado virtual debería funcionar al lado del real (como el touchpad y el mouse bluetooh)
- Esto debería funcionar con cada programa. Los ejemplos más difíciles que puedo encontrar son: Terminal + vim, escritorio remoto, juegos como Starcraft

El código de muestra y los enlaces son más que bienvenidos.

editar: El punto principal es tener acceso programático a las pulsaciones de teclas. Hay programas similares, pero están en código cerrado (por ejemplo, http://www.assistiveware.com/keystrokes.php ). Quiero saber cuál es la mejor manera de hacer este tipo de programa.

edición 2: Ahora tengo esta fiesta comenzada. A continuación se muestra un código copy-edit-paste-try-something-else que básicamente incluye todas las partes necesarias para hacer un teclado virtual. En este caso, cada vez que presiono ''a'' el teclado virtual presiona ''z''. Hay un error, que hay múltiples ''z''s agregadas ...

#import <ApplicationServices/ApplicationServices.h> CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) { UniChar unicodeString[101]; UniCharCount unicharCount; char chars[2]; int i,j,charsLen; CGEventRef zDown; CGEventRef zUp; zDown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, true); zUp = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, false); //printf("%u %u/n", (uint32_t)type, (uint32_t) event); CGEventKeyboardGetUnicodeString(event, 100, &unicharCount, unicodeString); for (i=0; i < unicharCount; i++) { if (unicodeString[i] > 127) { chars[0] = (unicodeString[i] >> 8) & (1 << 8) - 1; chars[1] = unicodeString[i] & (1 << 8) - 1; charsLen = 2; } else { charsLen = 1; chars[0] = unicodeString[i]; } //for (j = 0; j < charsLen; j++) printf("%c", chars[j]); } if (chars[0] == ''a'') { CGEventPost(kCGHIDEventTap, zDown); CGEventPost(kCGHIDEventTap, zUp); } return event; } int main (int argc, const char * argv[]) { CFMachPortRef eventTap; CFRunLoopSourceRef runLoopSource; eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, kCGEventMaskForAllEvents, myCGEventCallback, NULL); runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0); CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes); CGEventTapEnable(eventTap, true); CFRunLoopRun(); return 0; }

br,
Juha


En la Mac, está la vista del teclado. ¿Por qué no puedes usar eso?


Puede hacer esto usando Quartz Event Taps , que proporciona un:

... C API para eventos, que son filtros utilizados para observar y alterar la secuencia de eventos de entrada de usuarios de bajo nivel en Mac OS X