【发布时间】:2011-02-19 10:48:29
【问题描述】:
是否可以根据需要以编程方式隐藏停靠图标。我知道在 plist 中定义属性“应用程序是代理(UIElement)”的一种方式,我们将可可应用程序作为用户代理。但这会导致永久隐藏停靠图标。
我正在寻找一种可以控制停靠图标可见性的方法。任何想法 ?
【问题讨论】:
标签: cocoa macos user-agent nib
是否可以根据需要以编程方式隐藏停靠图标。我知道在 plist 中定义属性“应用程序是代理(UIElement)”的一种方式,我们将可可应用程序作为用户代理。但这会导致永久隐藏停靠图标。
我正在寻找一种可以控制停靠图标可见性的方法。任何想法 ?
【问题讨论】:
标签: cocoa macos user-agent nib
很遗憾没有。您可以使用 TransformProcessType() 函数将纯后台应用转换为前台应用,但不能从前台应用转换为后台应用。
以下是从背景转到前景的方法:
ProcessSerialNumber psn = { 0, kCurrentProcess };
OSStatus returnCode = TransformProcessType(&psn, kProcessTransformToForegroundApplication);
if( returnCode != 0) {
NSLog(@"Could not bring the application to front. Error %d", returnCode);
}
【讨论】:
SetSystemUIMode 和 kUIModeAllHidden 选项,如 TN2062 中所述:developer.apple.com/mac/library/technotes/tn2002/tn2062.html但该解决方案也会隐藏 Dock(不仅仅是您的 Dock 磁贴——*整个 Dock*)。
这是可能的。但是,它也会隐藏菜单。
NSApplication.shared.setActivationPolicy(.accessory)
DispatchQueue.main.async {
NSApplication.shared.activate(ignoringOtherApps: true)
NSApplication.shared.windows.first!.makeKeyAndOrderFront(self)
}
然后返回:
NSApplication.shared.setActivationPolicy(.regular)
【讨论】: