【发布时间】:2009-07-04 15:10:28
【问题描述】:
如果选中,我如何使复选框隐藏停靠图标? 我已经制作了一个复选框来切换菜单栏项,但是您将如何使用停靠图标来执行此操作? 寻找一些代码来做到这一点。 谢谢!
【问题讨论】:
-
查看我对类似 SO 问题的评论:stackoverflow.com/a/68057340/1418981。在 macOS 11 上测试并运行。
标签: objective-c cocoa
如果选中,我如何使复选框隐藏停靠图标? 我已经制作了一个复选框来切换菜单栏项,但是您将如何使用停靠图标来执行此操作? 寻找一些代码来做到这一点。 谢谢!
【问题讨论】:
标签: objective-c cocoa
Swift 的更新,上面已经介绍了两种使用方式(它们给出相同的结果):
public class func toggleDockIcon_Way1(showIcon state: Bool) -> Bool {
// Get transform state.
var transformState: ProcessApplicationTransformState
if state {
transformState = ProcessApplicationTransformState(kProcessTransformToForegroundApplication)
}
else {
transformState = ProcessApplicationTransformState(kProcessTransformToUIElementApplication)
}
// Show / hide dock icon.
var psn = ProcessSerialNumber(highLongOfPSN: 0, lowLongOfPSN: UInt32(kCurrentProcess))
let transformStatus: OSStatus = TransformProcessType(&psn, transformState)
return transformStatus == 0
}
public class func toggleDockIcon_Way2(showIcon state: Bool) -> Bool {
var result: Bool
if state {
result = NSApp.setActivationPolicy(NSApplicationActivationPolicy.Regular)
}
else {
result = NSApp.setActivationPolicy(NSApplicationActivationPolicy.Accessory)
}
return result
}
【讨论】:
我用过这个代码:
BOOL iconInDock = [[NSUserDefaults standardUserDefaults] boolForKey:smHideShowIcon];
if (iconInDock) {
ProcessSerialNumber psn = { 0, kCurrentProcess };
// display dock icon
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
}
好的,如果我在 Info.plist 中设置 LSUIElement=1,它对我的应用程序有效。该代码仅适用于显示,但我如何隐藏图标?
【讨论】:
(发布这个作为答案,因为 cmets 没有代码格式)
QSBApplicationDelegate.m:223-228
BOOL iconInDock = [[NSUserDefaults standardUserDefaults] boolForKey:kQSBIconInDockKey];
if (iconInDock) {
ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
}
【讨论】:
您希望将您的应用程序设置为 LSUIElement,然后使用 TransformProcessType 启用 Dock 图标。需要重新启动应用程序才能使更改生效。有关示例,请参见 Google Quick Search Box 项目。
【讨论】:
将您的应用程序设置为 LSUIElement,然后调用:
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
在发射时。
这也适用于 MAS。
【讨论】: