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

对于使用FLTK的多窗口GUI应用程序,我想利用此快捷方式,但不知道如何获取用户在其系统上设置的组合。因此,我要寻找的是macOS系统调用,该调用为我提供了用于此Mac上Move focus to next window的组合键。

当然,如果使用FLTK有某种内置的方式,我宁愿使用本机系统调用,也不愿使用它。

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

更新08/10/2017
Öö的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命令进行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它的输出,但是您可能想解析它。

08-06 12:49