Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 是否可以在OSX中处理菜单栏上的单击事件?_Macos_Cocoa_Menubar - Fatal编程技术网

Macos 是否可以在OSX中处理菜单栏上的单击事件?

Macos 是否可以在OSX中处理菜单栏上的单击事件?,macos,cocoa,menubar,Macos,Cocoa,Menubar,是否可以在OSX中处理菜单栏上的单击事件 我指的是空白,不是菜单项 我试过这个--添加LocalMonitorForeventsMatchingMask [NSEvent addLocalMonitorForEventsMatchingMask: (NSLeftMouseDownMask | NSRightMouseDownMask | NSOtherMouseDownMask | NSKeyDownMask) handler:^(NSEvent *incomingEvent) { NS

是否可以在OSX中处理菜单栏上的单击事件

我指的是空白,不是菜单项

我试过这个--添加LocalMonitorForeventsMatchingMask

[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值以使其编译,但在其他方面,这似乎对我很有效。