2017-08-09 43 views
0

在macOS上,使用英文鍵盤時,組合鍵CMD+Backtick用於在應用程序的打開窗口中循環。例如德國鍵盤上的組合是CMD+<。這個快捷方式甚至可以使用System PreferencesKeyboardShortcutsKeyboardMove focus to next window配置。如何以編程方式在系統偏好設置中設置macOS鍵盤快捷鍵?

對於我使用FLTK的多窗口GUI應用程序,我想利用這個快捷方式,但不知道如何獲取用戶在他或她的系統上設置的組合。所以我在尋找的是一個macOS系統調用,它爲我提供了在這臺Mac上用於Move focus to next window的組合鍵。

當然,如果會有一些內置的方式使用FLTK我寧願通過本地系統調用。

谷歌搜索這個問題是一個噩夢......

更新2017年8月10日 OO的answer給了我一些想法,更多的研究。因爲我已經瞭解到,首選項存儲在com.apple.symbolichotkeys,更準確地在關鍵27.

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

參數1(98):這是ASCII碼爲「B」。第一個參數具有使用的快捷方式的ascii代碼,如果是非ascii字符,則爲65535。

參數2(11):這是kVK_ANSI_B(source)的鍵盤代碼。這些代碼與鍵盤有關。在US鍵盤上,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

可能使用AppleScript。快速谷歌搜索產量[this](http://www.macosxautomation.com/applescript/features/system-prefs.html)。您可以在bash中使用[osascript](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/osascript.1.html)調用AppleScript代碼(使用C++中的系統調用) 。 – scohe001

回答

1

我現在不能測試的答案...但我會先嚐試popendefaults命令,如:

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它的輸出,但你可能會希望解析它。

+0

我剛剛得到'(kCFPreferencesAnyApplication,NSUserKeyEquivalents)的域/默認對不存在'。但是你的回答給了我關於搜索條件的更多想法。我會用我得到的一些信息更新我的問題。 – z80crew

相關問題