有没有办法在系统设置中以编程方式更改按键时的表情符号面板?

问题描述 投票:0回答:1

我一直在尝试通过访问 plist 文件来更改它,但我找不到有关如何访问它的文档。我不确定这是否可能。

swift macos cocoa
1个回答
0
投票

我使用

fswatch
检测我的 ~/Library/Preferences
 文件夹中的哪些文件已更改
,同时我来回更改设置。果然,结果出现了
~/Library/Preferences/com.apple.HIToolbox.plist
(“人机界面工具箱”)。

接下来,我查看了它的结构并看到了

AppleFnUsageType
键,这看起来很有希望。我再次在系统偏好设置中来回更改设置,同时使用以下方法监视该键的特定更改:

watch -n 1 -d defaults read com.apple.HIToolbox AppleFnUsageType

我看到了以下结果:

  • 0
    映射到“不执行任何操作”
  • 1
    映射到“更改输入源”
  • 2
    映射到“显示表情符号和符号”
  • 3
    映射到“开始听写(按 🌐︎ 两次)”

因此您可以通过终端设置此设置:

defaults write com.apple.HIToolbox AppleFnUsageType -int 0

可以生成一个进程来从您的Swift程序运行

defaults
,但这很笨重,并且需要关闭应用程序沙箱。理想情况下,我们只调用
UserDefaults
API,但这不会让我们更改
com.apple.HIToolbox
域中的值(它只允许您更改自己的应用程序域或全局域的值)。

我们可以降低到较低的级别并使用 CoreFoundation 中的

CFPreferencesSetValue
,它可以让你做到这一点。它仍然相当简单:

import Foundation

enum FnKeyUsageType: Int {
    case doNothing = 0
    case changeInputSource = 1
    case showEmojiAndSymbols = 2
    case startDictation = 3
}

CFPreferencesSetValue(
    "AppleFnUsageType" as CFString,
    FnKeyUsageType.doNothing.rawValue as CFNumber,
    "com.apple.HIToolbox" as CFString,
    kCFPreferencesCurrentUser,
    kCFPreferencesAnyHost
)
© www.soinside.com 2019 - 2024. All rights reserved.