【问题标题】:cocoa global watch for modifier key press用于修饰键按下的可可全球手表
【发布时间】:2013-09-01 08:32:58
【问题描述】:

使用 addGlobalMonitorForEventsMatchingMask,我可以检查是否有按键被按下。当一个事件被触发时,我可以检查修饰符标志,看看是否有任何修饰符被联合使用。

但我需要知道是否在没有按下另一个键的情况下按下了修饰符。

我该怎么做?

【问题讨论】:

  • 您是否尝试将NSFlagsChangedMask 传递给addGlobalMonitorForEventsMatchingMask:handler:

标签: macos cocoa keypress keyboard-events globalevent


【解决方案1】:

您正在寻找kCGEventFlagsChanged 类型的事件:

CGEventMask eventMask = (1 << kCGEventFlagsChanged);
CFMachPortRef eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, eventMask, cgEventCallback, NULL);

...


CGEventRef cgEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef cgEvent, void *refcon)
{
    NSEvent *event = [NSEvent eventWithCGEvent:cgEvent];
    if (event.type == kCGEventFlagsChanged) {
        NSLog(@"modifier key!");
    }
}

【讨论】:

  • 在回调中,您可以在转换为NSEvent之前检查事件类型,使用CGEventGetType
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 2014-09-22
  • 2019-05-04
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多