检查系统菜单栏中是否显示NSStatusItem?

时间:2013-03-29 10:25:30

标签: objective-c macos cocoa nsstatusitem

是否可以检查系统菜单栏中是否显示NSStatusItem?它有时不是由于用户具有太多状态项和活动应用程序菜单栏大小。

我可以通过“hack”检查状态项的位置,如下所示:

statusRect = [[_statusItem valueForKey:@"window"] frame];

但我不能这样做是可见的:(它总是返回true)

BOOL visible = [[_statusItem valueForKey:@"window"] isVisible];

1 个答案:

答案 0 :(得分:0)

如果没有非常糟糕的黑客,我不相信它是可行的

我的第一个:

在NSStatusItem中有一个视图,并将window.isVisible与视图的visibleRect组合在一起。 无论如何,窗口都不能遮挡状态栏。
=>没用?

2。尝试

在NSStatusItem中有一个视图并尝试Proper way to determine if NSView is drawn中的hack =>没用?

可能有效的邪恶黑客

通过辅助功能api模拟鼠标点击并查看您的视图是否获得了该事件:


我尝试了什么

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    item = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];
    item.title = @"TEST";
    view = [[DDQuickMenuStatusItemView alloc] init];
    view.item = item;
    view.title = item.title;
    item.view = view;

    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(checkVisible:) userInfo:nil repeats:YES];
}

- (void)checkVisible:(id)timer {
    NSLog(@"NOT WORKING vis: %d", (view.window.isVisible && !NSEqualRects(view.visibleRect, NSZeroRect)));
    NSLog(@"NOT WORKING isDrawn: %d", (view.isDrawn));
}