关于应用程序的框是代理(UIElement)设置为YES?

时间:2011-03-26 08:21:55

标签: macos agent uielement about-box

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

[[NSApplication sharedApplication] orderFrontStandardAboutPanel:self];

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

有什么想法吗?

亲切的问候

3 个答案:

答案 0 :(得分:7)

几天前开始使用新应用程序,我想出来了。

[NSApp activateIgnoringOtherApps:YES]

诀窍!

答案 1 :(得分:0)

你有没看过这个网站:

Creating a Status Bar Application

答案 2 :(得分:0)

我认为最灵活的方法是您应该自己控制主窗口而不是情节提要。

应用程序完成启动后,可以根据以下应用程序策略显示主窗口或不显示主窗口:

    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
info.plist中的

和UIElement仅使您的Cocoa App能够不显示UI。