0

是否可以检查 NSStatusItem 在系统菜单栏中是否可见?有时不是因为用户有太多的状态项和活动的应用程序菜单栏大小。

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

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

但我不能做同样的事情是可见的:(它总是返回真)

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

1 回答 1

0

我不相信没有真正糟糕的黑客是可行的

我的第一个:

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

2.尝试

在您的 NSStatusItem 中有一个视图,并尝试从正确的方式来确定是否绘制了 NSView
=> 不起作用

真正邪恶的黑客可能会奏效

通过辅助功能 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));
}
于 2013-04-01T12:37:20.767 回答