0

システム メニュー バーに NSStatusItem が表示されているかどうかを確認することはできますか? ユーザーのステータス項目が多すぎたり、アクティブなアプリケーション メニュー バーのサイズが大きすぎたりすることが原因ではない場合があります。

次のように「ハック」を介してステータスアイテムの場所を確認できます。

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

しかし、 is visible: に対して同じことはできません (常に true を返します)。

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 に答える