pap*_*apr 61 macos cocoa icons dock lsuielement
我想隐藏Dock图标并显示一个NSStatusItem.我可以创建StatusItem但我不知道如何从Dock中删除图标.: - /
有任何想法吗?
Alb*_*ert 52
您可以使用所谓的激活策略:
// The application is an ordinary app that appears in the Dock and may
// have a user interface.
[NSApp setActivationPolicy: NSApplicationActivationPolicyRegular];
// The application does not appear in the Dock and does not have a menu
// bar, but it may be activated programmatically or by clicking on one
// of its windows.
[NSApp setActivationPolicy: NSApplicationActivationPolicyAccessory];
// The application does not appear in the Dock and may not create
// windows or be activated.
[NSApp setActivationPolicy: NSApplicationActivationPolicyProhibited];
Run Code Online (Sandbox Code Playgroud)
// The application is an ordinary app that appears in the Dock and may
// have a user interface.
NSApp.setActivationPolicy(.regular)
// The application does not appear in the Dock and does not have a menu
// bar, but it may be activated programmatically or by clicking on one
// of its windows.
NSApp.setActivationPolicy(.accessory)
// The application does not appear in the Dock and may not create
// windows or be activated.
NSApp.setActivationPolicy(.prohibited)
Run Code Online (Sandbox Code Playgroud)
这应该隐藏停靠图标.
NSRunningApplicationActivationPolicy.val*_*exa 48
要遵守不修改应用程序包的Apple准则,并保证Mac App Store应用程序/(Lion应用程序?)不会通过info.plist修改打破其签名,您可以默认将LSUIElement设置为1,然后应用程序启动:
ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
Run Code Online (Sandbox Code Playgroud)
显示它的停靠图标,或者如果用户选择不想要图标则绕过它.
只有一个副作用,应用程序的菜单在丢失并重新获得焦点之前不会显示.
我个人不喜欢不设置任何Info.plist选项并使用TransformProcessType(&psn, kProcessTransformToForegroundApplication)或TransformProcessType(&psn, kProcessTransformToUIElementApplication)基于用户设置.
Tib*_*abo 26
在Xcode 4中,它显示为"Application is agent(UIElement)",它是布尔值.
在Info.plist控件中 - 单击一个空白区域并从菜单中选择"添加行"类型"应用程序是代理(UIElement)"将其设置为YES.
为了使它可选,我在代码中添加了以下行(感谢Valexa!)
// hide/display dock icon
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hideDockIcon"]) {
//hide icon on Dock
ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
}
Run Code Online (Sandbox Code Playgroud)
更新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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32847 次 |
| 最近记录: |