kwhat / libuiohook

A multi-platform C library to provide global keyboard and mouse hooks from userland.
Other
496 stars 122 forks source link

Caps lock can't be suppressed on Mac OS Monterey #156

Open saml-dev opened 2 years ago

saml-dev commented 2 years ago

I'm on Mac OS 12.6 and suppressing caps lock doesn't work.

Setup

To test this, I'm building and running the demo_hook example in this repo. I added these lines to try to suppress the event:

        case EVENT_KEY_PRESSED:
           if(event->data.keyboard.keycode == VC_CAPS_LOCK){
                printf("caps lock press: %d\n",event->mask);
                event->reserved = 0x1;
            }
            break;
        case EVENT_KEY_RELEASED:
            if(event->data.keyboard.keycode == VC_CAPS_LOCK){
                printf("caps lock release: %d\n",event->mask);
                event->reserved = 0x1;  //and this part
            }
            break;

Expected Behavior

Setting event->reserved should prevent the caps lock key default behavior from happening.

Actual Behavior

The caps lock press is still registered and toggles the caps lock mode.

Note – I am able to suppress other keys successfully, such as VC_D. Let me know if there's any other testing I can do. I've never written C and was just compiling/tweaking this to test, but happy to help how I can.

kwhat commented 1 year ago

It sounds a lot like Apple is intentionally preventing this behavior. The caps-lock key on OSX works a lot differently than most other keys. I am not sure there is any way to "fix" this. Windows does something similar with ctrl+alt+delete.