这是模拟 Cmd-S 操作的代码:
CGKeyCode inputKeyCode = kVK_ANSI_S;
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
CGEventRef saveCommandDown = CGEventCreateKeyboardEvent(source, inputKeyCode, YES);
CGEventSetFlags(saveCommandDown, kCGEventFlagMaskCommand);
CGEventRef saveCommandUp = CGEventCreateKeyboardEvent(source, inputKeyCode, NO);
CGEventPost(kCGAnnotatedSessionEventTap, saveCommandDown);
CGEventPost(kCGAnnotatedSessionEventTap, saveCommandUp);
CFRelease(saveCommandUp);
CFRelease(saveCommandDown);
CFRelease(source);
一个CGKeyCode
只不过是一个无符号整数:
typedef uint16_t CGKeyCode; //From CGRemoteOperation.h
你面临的实际问题是将一个字符(可能是NSString
)转换成键码。幸运的是,《快捷键录制器Shortcut Recorder》项目中的代码可以在SRKeyCodeTransformer.m
文件中完成这一转换。它非常适合将字符串转换成键码,然后再转回去。