[英]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);
運行代理應用程序時,無法顯示菜單欄。只能在代理應用程序和菜單欄之間選擇一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.