Macos 是否可以在OSX中处理菜单栏上的单击事件?
是否可以在OSX中处理菜单栏上的单击事件 我指的是空白,不是菜单项 我试过这个--添加LocalMonitorForeventsMatchingMaskMacos 是否可以在OSX中处理菜单栏上的单击事件?,macos,cocoa,menubar,Macos,Cocoa,Menubar,是否可以在OSX中处理菜单栏上的单击事件 我指的是空白,不是菜单项 我试过这个--添加LocalMonitorForeventsMatchingMask [NSEvent addLocalMonitorForEventsMatchingMask: (NSLeftMouseDownMask | NSRightMouseDownMask | NSOtherMouseDownMask | NSKeyDownMask) handler:^(NSEvent *incomingEvent) { NS
[NSEvent addLocalMonitorForEventsMatchingMask: (NSLeftMouseDownMask | NSRightMouseDownMask | NSOtherMouseDownMask | NSKeyDownMask) handler:^(NSEvent *incomingEvent) {
NSEvent *result = incomingEvent;
NSWindow *targetWindowForEvent = [incomingEvent window];
return result;
}];
我还尝试添加GlobalMonitorforeventsMatchingMask
没有任何结果。可能吗
谢谢。您可以使用事件点击全局跟踪鼠标事件,然后仅计算单击是否在所需的矩形内:
#define kMenuBarHeight 22.0
CGEventRef leftMouseTapCallback(CGEventTapProxy aProxy, CGEventType aType, CGEventRef aEvent, void* aRefcon)
{
CGPoint theLocation = CGEventGetLocation(aEvent);
if (theLocation.y <= kMenuBarHeight) {
NSLog(@"CLICKED THE MENUBAR");
}
return aEvent;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
CGEventMask mask = CGEventMaskBit(kCGEventLeftMouseDown) | CGEventMaskBit(kCGEventLeftMouseUp);
CFMachPortRef leftMouseEventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, mask, leftMouseTapCallback, NULL);
if (leftMouseEventTap) {
CFRunLoopSourceRef runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, leftMouseEventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(leftMouseEventTap, true);
}
}
#定义kMenuBarHeight 22.0
CGEventRef leftMouseTapCallback(CGEventTapProxy aProxy,CGEventType aType,CGEventRef aEvent,void*aRefcon)
{
CGPoint theLocation=CGEventGetLocation(aEvent);
如果(location.y您可以使用事件点击全局跟踪鼠标事件,然后仅计算单击是否在所需的矩形内:
#define kMenuBarHeight 22.0
CGEventRef leftMouseTapCallback(CGEventTapProxy aProxy, CGEventType aType, CGEventRef aEvent, void* aRefcon)
{
CGPoint theLocation = CGEventGetLocation(aEvent);
if (theLocation.y <= kMenuBarHeight) {
NSLog(@"CLICKED THE MENUBAR");
}
return aEvent;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
CGEventMask mask = CGEventMaskBit(kCGEventLeftMouseDown) | CGEventMaskBit(kCGEventLeftMouseUp);
CFMachPortRef leftMouseEventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, mask, leftMouseTapCallback, NULL);
if (leftMouseEventTap) {
CFRunLoopSourceRef runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, leftMouseEventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(leftMouseEventTap, true);
}
}
#定义kMenuBarHeight 22.0
CGEventRef leftMouseTapCallback(CGEventTapProxy aProxy,CGEventType aType,CGEventRef aEvent,void*aRefcon)
{
CGPoint theLocation=CGEventGetLocation(aEvent);
如果(位置y但我怎么知道用户在空白处单击了什么?我可以问你为什么需要这个吗?顺便说一句,我提供的代码是你想要的,你只需要根据你的需要调整它…我必须将传递到CGEventTapCreate
的第三个参数从0
更改为CGEventTapOptions
enum值中的一个来获得它o编译,但在其他方面这似乎对我很有效。但我如何知道用户在空白处单击了什么?我可以问一下您为什么需要这个吗?顺便说一句,我提供的代码是您想要的,您只需根据您的需要对其进行调整…我必须将传递到CGEventTapCreate
的第三个参数从0
更改为C中的一个参数GEventTapOptions
enum值以使其编译,但在其他方面,这似乎对我很有效。