Я нашел надежный способ публикации измененных событий клавиатуры - он не соответствует примеру в документации Apple (который не работает), но, кажется, имеет смысл, и что самое важное, РАБОТАЕТ.
Вместо того, чтобы отправлять сообщения «сдвиг клавиши вниз» и «сдвиг клавиши вверх» (как указано в документации), вам нужно установить флаг-модификатор на нажатие клавиши. Вот как вывести заглавные буквы Z.
CGEventRef event1, event2;
event1 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)6, true);//'z' keydown event
CGEventSetFlags(event1, kCGEventFlagMaskShift);//set shift key down for above event
CGEventPost(kCGSessionEventTap, event1);//post event
Затем я отпускаю клавишу 'z' для полноты (также включаю флаг сдвига, хотя и не уверен, что это правильно).
event2 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)6, false);
CGEventSetFlags(event2, kCGEventFlagMaskShift);
CGEventPost(kCGSessionEventTap, event2);
Наконец (и причудливо) вам НЕОБХОДИМО отправить событие «нажатие клавиши» для клавиши Shift:
e5 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)56, false);
CGEventPost(kCGSessionEventTap, e5);
Не забудьте опубликовать свои события, как только вы закончите с ними.
Надеюсь, это кому-нибудь пригодится - у меня ушло много времени, чтобы заставить это работать.