

OSXプログラミングをしていて、Control-F4
といったキーボードショートカットのキーシーケンスをアプリで生成したいのですが、`CGEventCreateKeyboardEvent` と
`CGEventPost` を使ってもうまくいきません。`CGPostKeyboardEvent`
を使って同様のキーストロークを発生した場合にはうまく動きました。しかしながら、`CGPostKeyboardEvent` は deprecated
になってしまったので、別の方法をさがしています。

[code]

    CGPostKeyboardEvent((CGCharCode)0, (CGKeyCode)118/*F4*/, true); // worked
    
    CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(NULL, (CGKeyCode)118/*F4*/, true)); // doesn't work
    
[/code]

どのようにすれば、`CGPostKeyboardEvent`
のようにキーボードショートカットのアプリでの実行ができるようになるかお教えいただけると幸いです。こういった、システムにかかわるキーボードショートカットを発行できてしまうことが、`CGPostKeyboardEvent`
が deprecated になってしまった理由ではないかと思わなくもないのですが…


CC BY-SA 3.0
2014-12-03T00:55:29.927
283
2014-12-03T22:26:29.313
658
question
macos objective-c quartz
CGEventCreateKeyboardEvent と CGEventPost の組み合わせで CGPostKeyboardEvent でできたことを実現したい


たとえば以下のようにすれば良いと思います。

[code]

    #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;
    }
    
[/code]


CC BY-SA 3.0
2014-12-03T22:26:29.313
330
2014-12-03T22:26:29.313
238
283
answer