How to reassign CAPSLOCK to OSX?

CapsLock appears to be one of the two most difficult keys to reassign (the other is the power button).

I can globally intercept NSEvent's:

_eventTap = CGEventTapCreate( kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, CGEventMaskBit( kCGEventFlagsChanged ), (CGEventTapCallBack)_tapCallback, (__bridge void *)(self)); : 

However, I do not receive an event for each key up / down. This actually happens:

(CapsLock initial state is off)

Key down: NSSystemDefined: 40a00 NSSystemDefined: 40b00 (Green light is currently on)

Key: NSSystemDefined: 40b00

Key down: NSSystemDefined: 40a00 (Green light is currently off)

Key: (nothing)

Therefore, I cannot display at this level.

But I thought that I could track at a lower level using IOKit, which defines every keystroke / up event, and then eats up the CAPSLOCK events at that level (returning NULL):

 - (CGEventRef)processEvent:(CGEventRef)cgEvent { NSEvent* event = [NSEvent eventWithCGEvent:cgEvent]; NSUInteger modifiers = [event modifierFlags] & ( NSCommandKeyMask | NSAlternateKeyMask | NSShiftKeyMask | NSControlKeyMask | NSAlphaShiftKeyMask ); NSUInteger flags_changed = _modifiers ^ modifiers; if( flags_changed & NSAlphaShiftKeyMask ) { NSLog( @"Eating CAPSLOCK" ); return NULL; } _modifiers = modifiers; : 

However, this does not stop CapsLock from doing its job (such as capital letters).

I even tried to remove the CapsLock modifier flag from each keyboard event inside the handler:

 if( modifiers & NSAlphaShiftKeyMask ) event = [NSEvent keyEventWithType: event.type location: NSZeroPoint modifierFlags: event.modifierFlags & ! NSAlphaShiftKeyMask timestamp: event.timestamp windowNumber: event.windowNumber context: event.context characters: event.characters charactersIgnoringModifiers: event.charactersIgnoringModifiers isARepeat: event.isARepeat keyCode: event.keyCode ]; 

... but no luck!

Is there any way to tame this annoying CapsLock key?

EDIT: How to simulate a Caps Lock keypress using CGEventCreateKeyboardEvent in OS X

+5
source share

All Articles