【问题标题】:Cmd+Shift+4 Simulation in Cocoa/Obj-C ErrorCocoa/Obj-C 错误中的 Cmd+Shift+4 模拟
【发布时间】:2014-11-08 03:58:33
【问题描述】:

这是我的代码:

CGEventSourceRef src =
CGEventSourceCreate(kCGEventSourceStateHIDSystemState);

CGEventRef cmdd = CGEventCreateKeyboardEvent(src, 0x37, true);
CGEventRef cmdu = CGEventCreateKeyboardEvent(src, 0x37, false);
CGEventRef sftd = CGEventCreateKeyboardEvent(src, 0x38, true);
CGEventRef sftu = CGEventCreateKeyboardEvent(src, 0x38, false);
CGEventRef fourd = CGEventCreateKeyboardEvent(src, 0x15, true);
CGEventRef fouru = CGEventCreateKeyboardEvent(src, 0x15, false);

CGEventSetFlags(fourd, kCGEventFlagMaskCommand); //NO idea why this is here.
CGEventSetFlags(fouru, kCGEventFlagMaskCommand); //NO idea why this is here.


CGEventTapLocation loc = kCGHIDEventTap; // kCGSessionEventTap also works
CGEventPost(loc, cmdd); //Cmd down
CGEventPost(loc, sftd); //Shift down
CGEventPost(loc, fourd);   //4 down
CGEventPost(loc, cmdu); //Cmd up
CGEventPost(loc, sftu); //Shift up
CGEventPost(loc, fouru);   //4 up

CFRelease(cmdd);
CFRelease(cmdu);
CFRelease(sftd);
CFRelease(sftu);
CFRelease(fourd);
CFRelease(fouru);
CFRelease(src);

}

谁能告诉我为什么这不起作用?它使一个按钮按下执行命令 Cmd+Shft+4 并允许用户执行截图功能。

【问题讨论】:

    标签: objective-c xcode cocoa keyboard simulation


    【解决方案1】:

    您缺少为 cmd/shift/4 击键设置的一些标志。

    CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
    
    CGEventRef cmdd = CGEventCreateKeyboardEvent(src, 0x37, true);
    CGEventRef cmdu = CGEventCreateKeyboardEvent(src, 0x37, false);
    CGEventSetFlags(cmdd, kCGEventFlagMaskCommand);
    CGEventSetFlags(cmdu, kCGEventFlagMaskCommand);
    CGEventRef sftd = CGEventCreateKeyboardEvent(src, 0x38, true);
    CGEventRef sftu = CGEventCreateKeyboardEvent(src, 0x38, false);
    CGEventSetFlags(sftd, kCGEventFlagMaskShift);
    CGEventSetFlags(sftu, kCGEventFlagMaskShift);
    CGEventRef fourd = CGEventCreateKeyboardEvent(src, 0x15, true);
    CGEventRef fouru = CGEventCreateKeyboardEvent(src, 0x15, false);
    CGEventSetFlags(fourd, kCGEventFlagMaskCommand ^ kCGEventFlagMaskShift);
    CGEventSetFlags(fouru, kCGEventFlagMaskCommand ^ kCGEventFlagMaskShift);
    
    CGEventTapLocation loc = kCGHIDEventTap; // kCGSessionEventTap also works
    CGEventPost(loc, sftd); //Shift down
    CGEventPost(loc, cmdd); //Cmd down
    CGEventPost(loc, fourd);   //4 down
    CGEventPost(loc, fouru);   //4 up
    CGEventPost(loc, sftu); //Shift up
    CGEventPost(loc, cmdu); //Cmd up
    
    CFRelease(cmdd);
    CFRelease(cmdu);
    CFRelease(sftd);
    CFRelease(sftu);
    CFRelease(fourd);
    CFRelease(fouru);
    CFRelease(src);
    

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 2014-07-22
      • 1970-01-01
      相关资源
      最近更新 更多