我正在寻找一种方法来设计一个带有修改键的小面板(例如,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”按钮细胞类型是关键,但不幸的是没有。 : - )
任何帮助?
提前感谢。
答案 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)
希望这会有所帮助。如果有人知道如何做同样的事情而不必为每个事件添加标志,请告诉你。