Существует ли официальный API для чтения текущих настроек в «Системных настройках> Клавиатура> Клавиши-модификаторы ...» в OSX (10.11.6, надеюсь, в совместимом режиме) из программы на C (Carbon / CoreFoundation .. .) который предназначен для запуска из командной строки (без интерфейса)?
Я видел Как я могу изменить клавиши-модификаторы в «Системные настройки> Клавиатура> Клавиши-модификаторы ...» и (ссылка) Кто-нибудь знает, где OSX хранит настройки в Системных настройках> Клавиатура> Клавиши-модификаторы? , но ни один не предоставляет "официальный" API.
Я также сталкивался с Замена устаревшего ответа NXOpenEventStatus? при копании в заголовках IOHID и использовании ключевых слов для поиска. Это выглядело многообещающе, глядя на вывод, который содержал HIDKeyboardModifierMappingPairs
. Однако при выполнении примера ответа отображается пустой HIDKeyboardModifierMappingPairs
CFArray
.
Вставка кода для простоты использования и вывода фрагмента:
#import <Foundation/Foundation.h>
#import <IOKit/hidsystem/IOHIDLib.h>
#import <IOKit/hidsystem/IOHIDParameter.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
io_service_t service = IORegistryEntryFromPath(kIOMasterPortDefault, kIOServicePlane ":/IOResources/IOHIDSystem");
CFDictionaryRef parameters = IORegistryEntryCreateCFProperty(service, CFSTR(kIOHIDParametersKey), kCFAllocatorDefault, kNilOptions);
NSLog(@"%@", parameters);
IOObjectRelease(service);
}
return 0;
}
и выходной фрагмент:
2018-11-10 17:32:38.564 iohidparam_mout[22543:1699981] {
...
HIDKeyboardModifierMappingPairs = (
);
...
}
Бонус: есть ли служба уведомлений, когда пользователь обновляет эти настройки через Системные настройки?