【问题标题】:(Mac) Simulating keyboard shortcuts - Arrow keys don't work(Mac) 模拟键盘快捷键 - 箭头键不起作用
【发布时间】:2018-07-29 01:38:08
【问题描述】:

我正在尝试使用 Quartz 事件服务以编程方式触发键盘快捷键:

CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);

CGEventRef leftDown = CGEventCreateKeyboardEvent(src, 0x7b, true); // creating left arrow down event
CGEventRef leftUp = CGEventCreateKeyboardEvent(src, 0x7b, false); // creating left arrow up event

CGEventSetFlags(leftDown, kCGEventFlagMaskCommand); // setting command key modifier flag
CGEventSetFlags(leftUp, kCGEventFlagMaskCommand); // ""

CGEventTapLocation loc = kCGHIDEventTap;
CGEventPost(loc, leftDown);
CGEventPost(loc, leftUp);

CFRelease(leftDown);
CFRelease(leftUp);
CFRelease(src);

如果您使用的不是箭头键,此代码可用于触发系统功能。但如果你确实使用箭头键,代码只会让你的光标移动。

例如用(0x31, kCGEventFlagMaskCommand)这个代码触发command-space成功调出spotlight,但是如果你把spotlight映射到command-left_arrow,然后用这个代码触发command-left_arrow,只会让光标跳转到行首。


值得注意的是,当我尝试触发包含箭头键的系统快捷方式时,Apple Script 的行为方式完全相同。

有解决办法吗?

感谢您的帮助,我很感激。

【问题讨论】:

    标签: objective-c macos keyboard-shortcuts cgeventtap


    【解决方案1】:

    由于某些原因,箭头键只能以您期望的方式与“私人”CGEventSourceStateID 一起使用。换行

    CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
    

    CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStatePrivate);
    

    它会按预期工作。 (在 macOS 10.13.4 上测试)

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多