小编Tho*_*ich的帖子

无法使用CGEventTap阻止大写锁定

我正在使用Quartz CGEventTap尝试全局拦截封锁按下并阻止它们(让它们做一些有用的事情).我成功地检测到了死锁,但到目前为止还无法阻止它们.我的代码(源自 stackoverflow答案)是这样的:

eventTap = CGEventTapCreate(kCGHIDEventTap,
                            kCGTailAppendEventTap, 
                            kCGEventTapOptionDefault, 
                            eventMask,
                            myCGEventCallback,
                            &oldFlags);

runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);

CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);

CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef theEvent, void *refcon)
{
    CGEventFlags *oldFlags = (CGEventFlags *)refcon; 

    switch (type)
    {
        case kCGEventFlagsChanged:
        {
            CGEventFlags newFlags = CGEventGetFlags(theEvent);
            CGEventFlags changedFlags = *oldFlags ^ newFlags; 
            *oldFlags = newFlags;

            if (changedFlags == 65536)
            {
                NSLog(@"Capslock pressed. Let's not return the event");
                return NULL;
            }
            break;
        }
        default:
            break;
    }

    NSLog(@"Different modifier than capslock. …
Run Code Online (Sandbox Code Playgroud)

capslock quartz-graphics cgeventtap

4
推荐指数
1
解决办法
998
查看次数

标签 统计

capslock ×1

cgeventtap ×1

quartz-graphics ×1