Carbon - 获取 CopySymbolicHotkeys 的标签?

Mat*_*att 6 macos macos-carbon

This answer aboutCopySymbolicKeys()让您获得 OS X 中系统快捷方式的键盘组合,但有没有办法获得与这些组合关联的标签?

例如,我可以??DCopySymbolicKeys()但我想获得“打开/关闭 Dock Hiding”,它在“系统偏好设置”>“键盘”>“快捷方式”中的相关标签。

我认为这不太可能,但仍然充满希望。

jva*_*ela 0

据我所知,没有 API 可以实现这一点,但可以重建你想要的东西。不过,这需要您做一些工作。

您可以在此处获取符号键的名称:

  • 早期的 macOS 版本:System/Library/PreferencePanes/Keyboard.prefPane/Contents/Resources/en.lproj/DefaultShortcutsTable.xml
  • macOS 13 文图拉:/System/Library/ExtensionKit/Extensions/KeyboardSettings.appex/Contents/Resources/en.lproj/DefaultShortcutsTable.xml

你需要解析这个XML文件,然后在这里找到相应的热键:

~/Library/Preferences/com.apple.symbolichotkeys.plist
Run Code Online (Sandbox Code Playgroud)

sybmolichotkey必须在上述文件中的密钥(是的,密钥拼写错误!)与后一个文件中包含相同数字的XML密钥之间进行匹配。keyplist

取自DefaultShortcutsTable.xml文件的示例:

<dict>
        <key>name</key>
        <string>DO_NOT_LOCALIZE: Dashboard and Dock</string>
        <key>ax_description</key>
        <string>DO_NOT_LOCALIZE: Dashboard and Dock shortcuts (AX_DESCRIPTION)</string>
        <key>identifier</key>
        <string>dock</string>
        <key>iconname</key>
        <string>category_dock</string>
        <key>icon-bundle-path</key>
        <string>/System/Library/CoreServices/Dock.app</string>
        <key>canRestoreDefaults</key>
        <true/>
        <key>elements</key>
        <array>
            <dict>
                <key>name</key>
                <string>DO_NOT_LOCALIZE: Turn Dock Hiding On/Off</string>
                <key>key</key>
                <integer>2</integer>
                <key>modifier</key>
                <integer>1572864</integer>
                <key>sybmolichotkey</key>  <--- look for this key
                <integer>52</integer>      <--- and its value
                <key>charKey</key>
                <integer>100</integer>
            </dict>
            <dict>
                <key>name</key>
                <string>DO_NOT_LOCALIZE: Show Launchpad</string>
                <key>key</key>
                <integer>65535</integer>
                <key>modifier</key>
                <integer>0</integer>
                <key>sybmolichotkey</key>  <--- look for this key
                <integer>160</integer>     <--- and its value
            </dict>
        </array>
    </dict>
Run Code Online (Sandbox Code Playgroud)

然后在 中查找相同的数字com.apple.symbolichotkeys.plist

    <key>52</key>
    <dict>
        <key>enabled</key>
        <true/>
        <key>value</key>
        <dict>
            <key>parameters</key>
            <array>
                <integer>65535</integer>
                <integer>2</integer>
                <integer>1572864</integer>
            </array>
            <key>type</key>
            <string>standard</string>
        </dict>
    </dict>
Run Code Online (Sandbox Code Playgroud)

主要警告:后者plist是二进制形式。要将其转换为文本,您需要在终端中执行以下操作:

plutil -convert xml1 ~/Library/Preferences/com.apple.symbolichotkeys.plist 
Run Code Online (Sandbox Code Playgroud)