Из документации для CGEventCreateKeyboardEvent:
Необходимо ввести все нажатия клавиш, необходимые для создания символа, включая клавиши-модификаторы. Например, чтобы создать «Z», клавиша SHIFT должна быть нажата, клавиша «z» должна опускаться, а затем клавиши SHIFT и «z» должны быть освобождены:
blockquote>Таким образом, вы не можете просто нажать и освободить место с помощью модификатора опции, чтобы вызвать дополнительное пространство; вам нужно нажать опцию, нажать пробел, освободить место, вариант выпуска.
Как побочная заметка, opt-space по умолчанию ничего не делает; cmd-space - это горячая клавиша поиска Spotlight, а cmd-opt-space - горячая клавиша окна Spotlight.
Итак, этот код выведет поиск Spotlight:
- (void)execute { CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); CGEventRef cmdd = CGEventCreateKeyboardEvent(src, 0x38, true); CGEventRef cmdu = CGEventCreateKeyboardEvent(src, 0x38, false); CGEventRef spcd = CGEventCreateKeyboardEvent(src, 0x31, true); CGEventRef spcu = CGEventCreateKeyboardEvent(src, 0x31, false); CGEventSetFlags(spcd, kCGEventFlagMaskCommand); CGEventSetFlags(spcu, kCGEventFlagMaskCommand); CGEventTapLocation loc = kCGHIDEventTap; // kCGSessionEventTap also works CGEventPost(loc, cmdd); CGEventPost(loc, spcd); CGEventPost(loc, spcu); CGEventPost(loc, cmdu); CFRelease(cmdd); CFRelease(cmdu); CFRelease(spcd); CFRelease(spcu); CFRelease(src); }