簡體   English   中英

如何顯示NSStatusBar項並隱藏停靠欄圖標?

[英]How do you show a NSStatusBar item AND hide the dock icon?

我已經嘗試將“Application is Agent”設置為1,但狀態欄項目消失了。 設置為0時,狀態欄項目和停靠欄圖標都會顯示。 如何顯示狀態欄項但隱藏停靠欄圖標?

我在AppDelegate.swift awakeFromNib()applicationDidFinishLaunching()中嘗試了以下內容:

//class scope    
let statusItem = NSStatusBar.system().statusItem(withLength: NSVariableStatusItemLength)

//function scope    
self.statusItem.image = NSImage(named: "myImage")
let menu = NSMenu(title: "MyApp-Menu")
let menuItem = NSMenuItem(title: "title", action: nil, keyEquivalent: "")
menu.addItem(menuItem)
self.statusItem.menu = menu

已針對Mac OS 10.14進行了更新

在AppDelegate中:

let statusItem = NSStatusBar.system.statusItem(withLength:NSStatusItem.squareLength)

func applicationDidFinishLaunching(_ aNotification: Notification) {
    if let button = statusItem.button {
        button.image = NSImage(named:NSImage.Name("StatusBarButtonImage"))
        button.action = #selector(launchFromTray)
    }
    constructMenu()
}

func constructMenu() {
    let menu = NSMenu()
    menu.addItem(NSMenuItem.separator())
    menu.addItem(NSMenuItem(title: "Show", action: #selector(launchFromTray), keyEquivalent: "w"))
    menu.addItem(NSMenuItem(title: "Quit", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))

    statusItem.menu = menu
}

您現在應該將Application is agent (UIElement)為YES。 應該工作正常,希望這將有助於某人

要隱藏停靠圖標,必須將“Application is Agent”設置為“YES”,或者將app設置為UIElement Application:

 ProcessSerialNumber psn = { 0, kCurrentProcess };
 OSStatus rt = TransformProcessType(&psn, kProcessTransformToUIElementApplication);

根據您提供的代碼部分,我認為您說“狀態欄項目消失”並沒有真正消失,只是菜單消失了。 除非您編寫錯誤的代碼,否則狀態欄不會消失,但您的代碼看起來很好。

如果我認為是正確的,菜單會消失,因為該應用程序是代理應用程序。 你需要做的就是讓它再次成為一個UI元素應用程序:

ProcessSerialNumber psn = { 0, kCurrentProcess };
    OSStatus returnCode = TransformProcessType(&psn, kProcessTransformToForegroundApplication);

運行代理應用程序時,無法顯示菜單欄。只能在代理應用程序和菜單欄之間選擇一個。

代理包括僅限背景的應用程序,無面向背景的應用程序和UI元素,但不是帶有菜單欄的完整應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM