我正在尝试使用CGEventCreateKeyboardEventCGEventPost发送系统范围键盘快捷键(如control-f4)的击键,但没有成功。使用CGPostKeyboardEvent发送这样的击键效果很好,但该方法已被弃用,我正在寻找替代方法。

CGPostKeyboardEvent((CGCharCode)0, (CGKeyCode)118/*F4*/, true); // worked

CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(NULL, (CGKeyCode)118/*F4*/, true)); // doesn't work

有人能告诉我出了什么问题吗?或者我应该读懂些什么?恐怕这种CGPostKeyboardEvent发布系统范围快捷方式的能力是一个不赞成的理由。任何意见都将不胜感激!

最佳答案

我通过stackoverflow japanhttp://goo.gl/nACVPz得到了一个答案,并确认以下代码有效!

#import <Foundation/Foundation.h>
#import <Carbon/Carbon.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);

        CGEventRef f4 = CGEventCreateKeyboardEvent(source, kVK_F4, true);
        CGEventSetFlags(f4, kCGEventFlagMaskControl);
        CGEventTapLocation location = kCGHIDEventTap;

        CGEventPost(location, f4);

        CFRelease(f4);
        CFRelease(source);
    }
    return 0;
}

10-08 09:26