如何以编程方式获取系统偏好设置中设置的 macOS 键盘快捷键?

2023-12-14

在 macOS 上的组合键CMD+Backtick用于在使用英文键盘时循环浏览应用程序打开的窗口。例如,在德语键盘上,组合是CMD+<。该快捷方式甚至可以使用配置System Preferences -> Keyboard -> Shortcuts -> Keyboard -> Move focus to next window.

对于使用 FLTK 的多窗口 GUI 应用程序,我想利用此快捷方式,但不知道如何获取用户在其系统上设置的组合。所以我正在寻找一个 macOS 系统调用,它可以为我提供用于Move focus to next window在这台 Mac 上。

当然,如果有一种使用 FLTK 的内置方式,我更愿意这样做,而不是使用本机系统调用。

谷歌搜索这个问题是一场噩梦......

更新 08/10/2017 Öö's answer给了我一些进一步研究的想法。从那以后我了解到首选项存储在com.apple.symbolichotkeys,更准确地说是在键 27 中。

        27 =         {
        enabled = 1;
        value =             {
            parameters =                 (
                98,
                11,
                524288
            );
            type = standard;
        };
    };

参数1(98):这是“b”的 ASCII 代码。第一个参数包含所用快捷方式的 ascii 代码,如果是非 ascii 字符,则为 65535。

参数2(11):这是 kVK_ANSI_B 的键盘代码(source)。这些代码取决于键盘。在美式键盘上,kVK_ANSI_Z 为 0x06,而在德文键盘上为 0x10。

参数3(524288):这是修改键的:

0x000000 => "No modifier",
0x020000 => "Shift",
0x040000 => "Control",
0x080000 => "Option",
0x100000 => "Command",

(0x80000 等于 524288。)

所以我的任务似乎只是解析输出defaults read com.apple.symbolichotkeys,从参数字典中获取按键组合,根据键盘布局正确解释这些组合,并使用这些信息在我的 FLTK 应用程序中设置回调。


我现在无法测试答案......但我会首先尝试popen the defaults命令如下:

HFILE file;
if (!(file = popen("defaults read NSGlobalDomain NSUserKeyEquivalents", "r")))
{
    return nullptr;    
}
const int MAX_BUF_SIZE = 512;
char temp[MAX_BUF_SIZE+1] = "";
while (fgets(temp, MAX_BUF_SIZE, file) > 0)
{
    printf("%s",temp);
    memset(temp, 0, MAX_BUF_SIZE+1);
}
pclose(file);

在这里我只是printf它的输出,但您可能想要解析它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式获取系统偏好设置中设置的 macOS 键盘快捷键? 的相关文章

  • 持续运行的 C# 代码 - 服务还是单独的线程?

    我有一个 NET 4 Web 应用程序 它有 3 个关联的独立项目 DAL BAL 和 UI 我正在使用实体框架进行数据库交互 我有代码循环遍历一堆数据库数据 根据找到的内容调用方法 然后更新数据库 我希望这段代码一直运行 同时 我希望用户
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • argc 和 argv 在 Windows 中没有用吗?

    在 Linux 中 argc 和 argv 计算终端中的参数 但在 Windows 中 我找不到放置第二个参数的地方 事实上 每次我运行该程序时 它都会创建那个丑陋的黑色窗口 我什至没有机会给出任何争论 那么这两个变量在Windows平台下
  • Excel 2007 中的数值 - 底层 xml 文件中的表示与存储

    这个问题与 NET和OpenXml有关 我已经阅读了以下文章 它有很好的解释 但没有回答我的问题 Excel 2007 中数值的可视化与底层 xml 文件不一致 https stackoverflow com questions 58594
  • 如何让 PCRE 与 C++ 一起使用?

    这是一个新手问题 但我希望我能尽可能清楚地表达我的问题 我正在尝试用 C 进行模式匹配 我已经从以下位置下载了 PCRE 的 Win32 版本here http gnuwin32 sourceforge net packages pcre
  • 合并大文件的最佳方法是什么?

    我必须合并数千个大文件 每个大约 200MB 我想知道合并这些文件的最佳方法是什么 行将有条件地复制到合并文件中 可以使用 File AppendAllLines 或使用 Stream CopyTo 吗 使用 File AppendAllL
  • 如何在 Swift Playground 中将文本转换为 OSX 语音

    我正在尝试学习如何为 OSX 进行文本转语音 notiOS 在 Swift 中 我有一个带有代码的游乐场 import Cocoa let synth NSSpeechSynthesizer synth startSpeaking Hell
  • 在 C# 中为 ListBox 分配数据源时,如何从 ListBox 中删除所选项目?

    在 C 中为 ListBox 分配数据源时 如何从 ListBox 中删除所选项目 尝试删除时出现错误 设置 DataSource 属性后 无法修改项目集合 但是当我尝试从数据源 数据表 中删除项目时 它会抛出错误 因为 数据行不在当前行集
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in
  • Task.Delay 到底是如何工作的?

    他们说 Task Delay 是一个异步 Thread Sleep 为了测试这一点 我写了下面的代码 我希望立即打印 One 然后 3 秒后将打印结果变量 15 2 秒后 将打印 Two 但似乎并非如此 一 不会立即打印 3 秒后打印 On
  • 具有可导出私钥的证书的“错误密钥”例外

    我正在尝试使用非对称加密来加密然后解密文件 我已经使用 makecert 创建了一个测试证书并将其安装到我的个人本地计算机存储中 将来我必须在多个服务器上安装此证书 这就是为什么我使用 pe 标志创建它 即使用可导出的私钥 证书已成功创建并
  • AudioQueueStart 报告不支持的格式

    我试图让音频队列在 iPhone 应用程序上工作 每当调用 AudioQueueStart 时 它都会给出 fmt 结果代码 kAudioFormatUnsupportedDataFormatError 在下面的代码中 我将格式设置为 kA
  • IIS 中有 ASP.NET 网站管理工具吗?

    我正在使用 asp net 网站管理工具来管理项目中的不同角色 当前是客户和管理员 在vs 2008的开发过程中 管理角色非常容易 项目 gt Asp Net 配置 部署系统 IIS 时如何管理我的角色和用户 是否可以在 IIS 上运行 a
  • C++ Protobuf 与 JSON 的转换 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人熟悉将 protobuf 消息与 JSON 相互转换的稳定 C 解决方案 库 代码片段等 吗 在我看来 这个更好 https gith
  • HttpContext.Current.Items["value"] 不起作用,因为 AngularJS 调用创建新会话

    我正在使用 C MVC 和 AngularJS 我的问题是我的 MVC 程序创建了一个HttpContext Current Items value 并在初始主控制器中设置值 但是当我的 AngularJS 通过 ajax 调用调用应用程序
  • 如何部署使用sql serverexpress 2012和水晶报表开发的C#windows窗体应用程序

    我在 Microsoft Visual Studio 2013 Net Framework 4 5 中开发了一个应用程序 我使用的 DBMS 是 SQL Server 2012 Express 用于报告的使用的是 Crystal Repor
  • 协变虚函数返回类型问题

    我有以下代码 include
  • 如何使用 IComparable 接口?

    我需要一个如何使用的基本示例IComparable接口 以便我可以按升序或降序以及要排序的对象类型的不同字段进行排序 好吧 既然你正在使用List
  • 如何使用 AutofacContrib.NSubstitute 监视被测类

    我正在使用 NSpec 框架 AutofacContrib NSubstitute v3 3 2 0 NSubstitute v1 7 0 0 目前最新的是 1 8 2 的类库项目中运行单元测试 The 被测类实例是用AutoSubstit
  • Admob WP8 System.UnauthorizedAccessException

    我正在使用 VS2012 开发 WP8 应用程序 我希望添加 Admob 横幅广告 不幸的是它引发了异常 导致我的应用程序冻结 为了捕获此 admob 异常 我必须禁用 仅我的代码 VS2012 设置 并且在执行以下代码后 我在最后一行收到

随机推荐