使用 NSEvent 在 OS X 上捕获其他鼠标按钮事件
Capture other mouse button events on OS X with NSEvent
我正在尝试捕获 OS X Yosemite 上的鼠标点击。
据我了解,这段代码应该可以工作:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSOtherMouseDown
handler:^(NSEvent *event) {
NSLog(@"Mouse Down, Button: %ld", event.buttonNumber);
}];
但是,它仅适用于鼠标右键事件,不适用于其他按钮(即多按钮鼠标上的按钮 4、5、6 等)。
使用 Quartz Event Taps,我能够检测到鼠标在这些按钮上的点击,如下所示:
CGEventTapCreate(kCGSessionEventTap,
kCGHeadInsertEventTap,
0,
CGEventMaskBit(kCGEventOtherMouseUp) | CGEventMaskBit(kCGEventOtherMouseDown),
MouseEventCallback,
NULL);
但我更愿意使用 NSEvent API,因为它更直接。
关于如何使用 NSEvent 捕获其他鼠标按钮事件有什么想法吗?
这可能只是您问题中的错字?,但您的代码缺少 NSEventMaskFromType,例如:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSEventMaskFromType(NSOtherMouseDown) ..
^^^^^^^^^^^^^^^^^^^
我正在尝试捕获 OS X Yosemite 上的鼠标点击。
据我了解,这段代码应该可以工作:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSOtherMouseDown
handler:^(NSEvent *event) {
NSLog(@"Mouse Down, Button: %ld", event.buttonNumber);
}];
但是,它仅适用于鼠标右键事件,不适用于其他按钮(即多按钮鼠标上的按钮 4、5、6 等)。
使用 Quartz Event Taps,我能够检测到鼠标在这些按钮上的点击,如下所示:
CGEventTapCreate(kCGSessionEventTap,
kCGHeadInsertEventTap,
0,
CGEventMaskBit(kCGEventOtherMouseUp) | CGEventMaskBit(kCGEventOtherMouseDown),
MouseEventCallback,
NULL);
但我更愿意使用 NSEvent API,因为它更直接。
关于如何使用 NSEvent 捕获其他鼠标按钮事件有什么想法吗?
这可能只是您问题中的错字?,但您的代码缺少 NSEventMaskFromType,例如:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSEventMaskFromType(NSOtherMouseDown) ..
^^^^^^^^^^^^^^^^^^^