CGEventPost - 持钥匙(班次)

时间:2013-07-21 14:11:26

标签: cocoa keyboard-events

我正在寻找一种方法来设计一个带有修改键的小面板(例如,shift,命令),并且必须像虚拟键盘一样点击它。

我希望它有这种行为:

  • 点击虚拟键(shift)。
  • 移位按钮保持,并一直按下。
  • 使用我的标准键盘输入内容。
  • 单击虚拟shift键上的其他时间以释放它。

这是我正在使用的代码:

CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef shiftKeyDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)56, YES);
CGEventRef shiftKeyUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)56, NO);

CGEventPost(kCGAnnotatedSessionEventTap, shiftKeyDown);
CGEventPost(kCGAnnotatedSessionEventTap, shiftKeyUp);

CFRelease(shiftKeyUp);
CFRelease(shiftKeyDown);
CFRelease(source);

在我再次点击它之前,我找不到按下它的方法。我虽然“Push On Push Off”按钮细胞类型是关键,但不幸的是没有。 : - )

任何帮助?

提前感谢。

1 个答案:

答案 0 :(得分:0)

按照这种方式虚拟按下一个换档键,当后面跟着一个不包含换档标志的事件时,它会自动释放。这似乎是一个限制,或者可能是一个错误,考虑到文档类型另有说明:https://developer.apple.com/reference/coregraphics/cgevent/1456564-init#discussion

我找到的唯一方法就是设置一个事件监听器,并将shift标志添加到应该由Shift键修改的每个事件。

如何收听键盘事件的示例:https://stackoverflow.com/a/31898592/1445812(Swift)

关于如何将移位标志用于拦截事件的示例:

event?.flags.insert(.maskShift)

希望这会有所帮助。如果有人知道如何做同样的事情而不必为每个事件添加标志,请告诉你。