Имитация нажатия клавиш для системных горячих клавиш
Мне нужно имитировать нажатия клавиш в OSX. Вот как я это делаю:
-(void)execute {
CGEventSourceRef sourceRef =
CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef keyPress = CGEventCreateKeyboardEvent (sourceRef, (CGKeyCode)keyCode, true);
CGEventRef keyUnpress = CGEventCreateKeyboardEvent (sourceRef, (CGKeyCode)keyCode, false);
CGEventSetFlags(keyPress, modifierFlags);
CGEventPost(kCGHIDEventTap, keyPress);
//unpressing the acualkey
CGEventPost(kCGHIDEventTap, keyUnpress);
CFRelease(keyPress);
CFRelease(keyUnpress);
CFRelease(sourceRef);
}
Он отлично работает для каждой горячей клавиши или простого нажатия клавиши в любом приложении, но не работает, например, для общесистемных сочетаний клавиш.option + space запустить Spotlight илиcmd + shift + 4 сделать скриншот илиctrl + ` открыть окно iTerm2.
Я пытался изменить источник события и местоположение, в котором нужно опубликовать событие, не помогает. Есть идеи?