Mac OS X:拦截键盘布局更改

时间:2013-03-01 10:25:51

标签: objective-c c macos cocoa keyboard-shortcuts

我有问题。我的Mac上有两个键盘布局,因为在与不同的人通信时我必须键入两种不同的语言。我使用键盘快捷键Cmd+Space从一种布局(语言)切换到另一种布局(语言)。

我想知道在按下Cmd+Space时是否可以运行自定义脚本?我知道有一个名为Punto Switcher的应用程序可以做到这一点。

我的想法是更改键盘突出显示级别以指示当前语言。

  • Bright =德语(或俄语或其他)
  • Dim = English

问题是在哪里可以找到可以

的API
  1. 拦截Mac OS X中的键盘布局
  2. 更改键盘高亮显示的亮度
  3. enter image description here

2 个答案:

答案 0 :(得分:5)

来自@Anoop Vaidya的LED亮度指针的整洁指针 - 看起来很有趣!

系统在输入法更改时发送通知。

首先,声明一个接收通知的函数:

void theKeyboardChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
    NSLog(@"Keyboard/input method changed.");
}

然后注册更改通知:

CFNotificationCenterAddObserver(CFNotificationCenterGetDistributedCenter(),
    myContextInfo, theKeyboardChanged,
    kTISNotifySelectedKeyboardInputSourceChanged, NULL,
    CFNotificationSuspensionBehaviorDeliverImmediately);

答案 1 :(得分:1)

我找到了一个Amit Singh的博客,在那里他给出了无证API的想法,他使用C,为此,你肯定可以从中找到一些帮助。

Experimenting With Light

或者你可以试试这些代码:

UInt64 lightInsideGetLEDBrightness(){
    kern_return_t kr = 0;
    IOItemCount   scalarInputCount  = 1;
    IOItemCount   scalarOutputCount = 1;
    UInt64        in_unknown = 0, out_brightness;
    kr = IOConnectCallScalarMethod(dataPort, kGetLEDBrightnessID, &in_unknown, scalarInputCount, &out_brightness, &scalarOutputCount);
    return out_brightness;
}