使用NSEvent在OS X上捕获其他鼠标按钮事件

时间:2015-03-07 15:53:45

标签: objective-c macos cocoa osx-yosemite

我正在尝试捕获OS X Yosemite上的鼠标点击次数。

根据我的阅读,这段代码应该有效:

[NSEvent addGlobalMonitorForEventsMatchingMask:NSOtherMouseDown
    handler:^(NSEvent *event) {
       NSLog(@"Mouse Down, Button: %ld", event.buttonNumber);
    }];

但是,它仅适用于鼠标右键的事件,而不适用于其他按钮(即多按钮鼠标上的按钮4,5,6等)。

使用Quartz事件抽头我能够检测到这些按钮上的鼠标点击,如下所示:

CGEventTapCreate(kCGSessionEventTap,
                 kCGHeadInsertEventTap,
                 0,
                 CGEventMaskBit(kCGEventOtherMouseUp) | CGEventMaskBit(kCGEventOtherMouseDown),
                 MouseEventCallback,
                 NULL);

但我更喜欢使用NSEvent API,因为它更直接。

有关如何使用NSEvent捕获其他鼠标按钮事件的任何想法?

1 个答案:

答案 0 :(得分:1)

你的问题可能只是一个错字?但是你的代码缺少NSEventMaskFromType,例如:

[NSEvent addGlobalMonitorForEventsMatchingMask:NSEventMaskFromType(NSOtherMouseDown) ..
                                               ^^^^^^^^^^^^^^^^^^^