在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
它的输出,但是您可能想解析它。