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