En Mac OS/Cocoa, ¿puedo sintetizar entradas de teclado - cadenas - para la aplicación frontal de forma transparente?Generar eventos de teclado para la aplicación más avanzada
Para ser más precisos, no deseo enviar caracteres especiales o secuencias de control. Mi única necesidad es enviar caracteres estándar.
acaba de aprender here, que AppleScript puede hacer el truco de esta manera:
tell application "TextEdit"
activate
tell application "System Events"
keystroke "f" using {command down}
end tell
end tell
Q: ¿Cómo puedo hacer esto usando ObjC/cacao?
ACTUALIZACIÓN 2012-02-18 - propuesta Nicks mejorado
basado en el código Nick 's más adelante, 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);
Usando este método, un clic en una El botón de un panel que no se activa apunta el evento a la aplicación frontal real. Perfectamente lo que quiero hacer.
¡Gracias! Nunca hice nada a un nivel tan bajo. – SteAp