制作复选框打开和关闭Dock图标

时间:2009-07-04 15:10:28

标签: objective-c cocoa

如果检查了停靠栏图标,我如何设置复选框? 我已经设置了一个复选框切换菜单栏项目,但是如何使用停靠栏图标? 寻找一些代码来做到这一点。 谢谢!

5 个答案:

答案 0 :(得分:12)

上面已经介绍了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
}

答案 1 :(得分:9)

我使用此代码:

BOOL iconInDock = [[NSUserDefaults standardUserDefaults] boolForKey:smHideShowIcon];
if (iconInDock) {
    ProcessSerialNumber psn = { 0, kCurrentProcess };
    // display dock icon
    TransformProcessType(&psn, kProcessTransformToForegroundApplication);
}

好吧,如果我在Info.plist中设置LSUIElement = 1,它对我的​​应用程序起作用。该代码仅适用于 show ,但我如何隐藏图标?

答案 2 :(得分:4)

(将此作为答案发布,因为评论没有代码格式化)

QSBApplicationDelegate.m:223-228

BOOL iconInDock = [[NSUserDefaults standardUserDefaults] boolForKey:kQSBIconInDockKey];
if (iconInDock) {
  ProcessSerialNumber psn = { 0, kCurrentProcess };
  TransformProcessType(&psn, kProcessTransformToForegroundApplication);
}

答案 3 :(得分:2)

您可能希望将应用程序设置为LSUIElement,然后使用TransformProcessType启用Dock图标。该应用程序需要重新启动才能使更改生效。有关示例,请参阅Google Quick Search Box项目。

答案 4 :(得分:0)

将您的应用程序设置为LSUIElement,然后调用:

[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];

发布时。

这也适用于MAS。