objective-c - eventos de teclado en java netbeans
Generar eventos de teclado para la aplicaciĆ³n principal (1)
En Mac OS / Cocoa, ¿puedo sintetizar entradas de teclado (cadenas) para la aplicación principal de forma transparente?
Para ser más precisos, no quiero enviar caracteres especiales o secuencias de control. Mi única necesidad es enviar caracteres estándar .
Acabo de aprender aquí , que AppleScript puede hacer el truco así:
tell application "TextEdit"
activate
tell application "System Events"
keystroke "f" using {command down}
end tell
end tell
P: ¿Cómo haría esto usando ObjC / cocoa?
ACTUALIZACIÓN 2012-02-18 - Propuesta de Nicks mejorada
Basado en el código de Nick a continuación, aquí está la solución final:
// First, get the PSN of the currently front app
ProcessSerialNumber psn;
GetFrontProcess( &psn );
// make some key events
CGEventRef keyup, keydown;
keydown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, true);
keyup = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, false);
// forward them to the frontmost app
CGEventPostToPSN (&psn, keydown);
CGEventPostToPSN (&psn, keyup);
// and finally behave friendly
CFRelease(keydown);
CFRelease(keyup);
Con este método, al hacer clic en un botón de un panel que no activa, el evento se dirige a la aplicación frontal real. Perfectamente lo que quiero hacer.
Claro, querrá usar CGEventCreateKeyboardEvent para crear eventos de teclado y luego publicarlos como tales:
CGEventRef keyup, keydown;
keydown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)56, true);
keyup = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)56, false);
CGEventPost(kCGHIDEventTap, keydown);
CGEventPost(kCGHIDEventTap, keyup);
CFRelease(keydown);
CFRelease(keyup);
Es un poco más complicado que AppleScript pero funciona. Tienes que publicar explícitamente una tecla y luego un evento de tecla. Más información en Quartz Event Services Reference .