В Mac OS/ Cocoa могу ли я синтезировать записи клавиатуры - строки - для самого первого приложения прозрачным способом?
Чтобы быть более точным, я не хочу отправлять специальные символы или контрольные последовательности. Моя единственная потребность - отправлять стандартные символы.
Просто узнал здесь, что AppleScript может сделать трюк следующим образом:
tell application "TextEdit"
activate
tell application "System Events"
keystroke "f" using {command down}
end tell
end tell
Q: Как мне это сделать, используя ObjC/ cocoa?
ОБНОВЛЕНИЕ 2012-02-18 - Улучшено предложение ников
Основываясь на Nick ниже, вот окончательное решение:
// 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);
Используя этот метод, щелчок на кнопке неактивирующей панели нацеливает событие на фактическое переднее приложение. Прекрасно, что я хочу делать.