1

Using addGlobalMonitorForEventsMatchingMask, I can check for keys being pressed. And when an event is fired, I can check the modifier flags to see if any modifiers were used in conjunction.

But I need to know if a modifier is pressed without another key being pressed.

How would I do this?

Andrew
  • 7,630
  • 3
  • 42
  • 51
Adam Meyer
  • 1,505
  • 1
  • 19
  • 28

1 Answers1

0

You're looking for events of type 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!");
    }
}
pkamb
  • 33,281
  • 23
  • 160
  • 191
  • 1
    In the callback, you could check the event type before converting to an `NSEvent`, using `CGEventGetType`. – JWWalker Nov 08 '13 at 02:37