9

我试图创建一个应该只在状态栏中可见的应用程序,并且在您按下 NSStatusItem 菜单选项之前没有窗口。所以我有一个应该打开“关于”

[[NSApplication sharedApplication] orderFrontStandardAboutPanel:self];

但是,如果我将 Application is agent 设置为 YES,则没有任何显示。如果我将其更改为 NO,它会起作用,但我会得到一个应用程序窗口和所有我不想看到的菜单选项。

有任何想法吗?

亲切的问候

4

2 回答 2

8

几天前开始了一个新的应用程序,我想通了。

[NSApp activateIgnoringOtherApps:YES]

行得通!

于 2012-02-27T15:19:12.013 回答
2

我认为最灵活的方法是您应该自己控制主窗口而不是故事板。

当应用程序完成启动时,您可以根据您的应用程序策略显示或不显示主窗口,如下所示:

 switch AppDefaults.shared.applicationRunMode {
        case .menuAndDock:
            _ = ApplicationMode.toggleDock(show: true)
            MainWindowController.shared.window?.makeKeyAndOrderFront(nil)
        case .menuOnly:
            _ = ApplicationMode.toggleDock(show: false)
            _ = MainWindowController.shared.window
        default:
            MainWindowController.shared.window?.makeKeyAndOrderFront(nil)
        }

toggleDock方法的实际作用是改变应用程序的显示方式。

// Get transform state.
let transformState = show ?
            ProcessApplicationTransformState(kProcessTransformToForegroundApplication)
            : ProcessApplicationTransformState(kProcessTransformToUIElementApplication)

// Show / hide dock icon.
var psn = ProcessSerialNumber(highLongOfPSN: 0, lowLongOfPSN: UInt32(kCurrentProcess))

let transformStatus: OSStatus = TransformProcessType(&psn, transformState)
return transformStatus == 0

UIElementinfo.plist唯一能让你的 Cocoa 应用程序隐藏 UI 的能力。

于 2019-07-08T04:11:59.813 回答