在macOS上,使用英文键盘时,组合键CMD+Backtick
用于循环浏览应用程序的打开窗口。例如,在德语键盘上,组合为CMD+<
。甚至可以使用System Preferences
- &gt;配置此快捷方式Keyboard
- &gt; Shortcuts
- &gt; Keyboard
- &gt; 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中设置回调应用
答案 0 :(得分:1)
我现在无法测试答案......但我会首先尝试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
它的输出,但您可能想要解析它。