如何更改 Dock Preferences 中“最小化到应用程序”的值

Posted

技术标签:

【中文标题】如何更改 Dock Preferences 中“最小化到应用程序”的值【英文标题】:How Change value of "minimize-to-application" in Dock Preferences 【发布时间】:2021-10-20 01:24:28 【问题描述】:

搜索CoreDockPreferences,发现这些私有系统APIcoredock.h

我正在尝试使用 CoreDockSetPreferences 更改 Minimize To App 的值,但它不起作用

下面是我在 Obj-c 中的接口和实现:

@interface Symbolic : NSObject

extern void CoreDockSetPreferences(CFDictionaryRef preferenceDict);

- (void) setDictionaryDock: (CFDictionaryRef)dockDict;

@end

@implementation Symbolic

-(void) setDictionaryDock: (CFDictionaryRef)dockDict

    CoreDockSetPreferences(dockDict);

这是我如何调用和传递 dock.plist 字典在 Swift 中更改:

func dockPrefChange()
    if let dir = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask).first 
        let dockPlistPath = dir.appendingPathComponent("Preferences", isDirectory: true).appendingPathComponent("com.apple.dock.plist", isDirectory: false)
        guard let dockDictionary = NSMutableDictionary(contentsOf: dockPlistPath) else return
        dockDictionary["minimize-to-application"] = 1
        Symbolic().setDictionaryDock(dockDictionary as CFDictionary)
    

【问题讨论】:

它是如何“不工作”的? CoreDockSetPreferences 被执行了吗? dockDict 应该是什么? 【参考方案1】:

谢谢Willeke你是对的。

DockDict 不是应该的。 阅读更多关于,我回答这个问题。

基本上我遵循 coredock.h 中的注释“序列用法”

// Example usage
/*
    CFArrayRef d = CFStringCreateArrayBySeparatingStrings(kCFAllocatorDefault, CFSTR("showRecents,showProcessIndicators,minimizeToApplication"), CFSTR(","));
    CFDictionaryRef dic;
    CoreDockCopyPreferences(d, &dic, nil);
 */

并重新创建如下代码:

@implementation Symbolic

- (NSDictionary*) getDictionaryDock

    CFArrayRef d = CFStringCreateArrayBySeparatingStrings(kCFAllocatorDefault, CFSTR("showRecents,showProcessIndicators,minimizeToApplication"), CFSTR(","));
    CFDictionaryRef dic;
    CoreDockCopyPreferences(d, &dic, nil);
    NSDictionary *nsDictionary = (__bridge NSDictionary*)dic;
    return nsDictionary;


- (void) setDictionaryDock: (NSDictionary*) newDictionary

    CFDictionaryRef dict = (__bridge CFDictionaryRef)newDictionary;
    CoreDockSetPreferences(dict);

在 Swift 中:

public func setMinimizeToApp(value: Bool)
    if var dict = symbolic.getDictionaryDock() as? [String: Bool] 
        if dict["minimizeToApplication"] != value
            dict["minimizeToApplication"] = value
            symbolic.setDictionaryDock(dict)
        
    

【讨论】:

以上是关于如何更改 Dock Preferences 中“最小化到应用程序”的值的主要内容,如果未能解决你的问题,请参考以下文章

如何设置我的应用程序的 Dock 名称?

在 CAR_MODE/CAR_DOCK 中如何在 android 中设置不同的家庭应用程序

sqldeveloper

从 Dock 中删除 AppleScript 脚本的图标

如何在不将Dock设置为Fill的情况下将Label置于Panel内部

更改 Qt/Mac Dock 图标有窗口标题副作用