Symuluj naciskanie klawiszy dla skrótów klawiaturowych
Muszę symulować naciśnięcia klawiszy w OSX. Oto jak to robię:
-(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);
}
Działa dobrze dla każdego skrótu klawiszowego lub prostych naciśnięć klawiszy w dowolnej aplikacji, ale nie działa na przykład dla skrótów systemowychopcja + spacja aby uruchomić Spotlight lubcmd + shift + 4 zrobić zrzut ekranu lubctrl + ` otworzyć okno iTerm2.
Próbowałem zmienić źródło zdarzenia i lokalizację, w której publikować zdarzenie, nie pomaga. Jakieś pomysły?