2013-03-01 17 views
6

Mam problem. Mam dwa układy klawiatury na moim Macu, ponieważ muszę komunikować się z różnymi osobami w dwóch różnych językach. Używam skrótu klawiaturowego Cmd+Space, aby przełączać się z jednego układu (języka) na inny.Mac OS X: Zmiana układu klawiatury przechwytywania

Zastanawiam się, czy mogę uruchomić niestandardowy skrypt po naciśnięciu przycisku Cmd+Space? Wiem, że istnieje aplikacja o nazwie Punto Switcher, która może to zrobić.

Mój pomysł polega na zmianie poziomu podświetlania klawiatury, aby wskazać aktualny język.

  • Bright = niemiecki (lub rosyjski lub cokolwiek)
  • Dim = English

Powstaje pytanie, gdzie znaleźć API, które można układ klawiatury

  1. przechwytujący w systemie Mac OS X
  2. Zmień jasność podświetlenia klawiatury

enter image description here

+0

fantazyjny obraz !! – Klaas

Odpowiedz

1

znalazłem blog Amit Singh, gdzie dał pomysł jak w nieudokumentowanych API, użył C, za to na pewno można znaleźć jakąś pomoc z tym.

Experimenting With Light.

Albo można spróbować z tych kodów:

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; 
} 
5

Neat wskaźnik LED jasności rzeczy z @Anoop vaidya - wygląda ciekawie!

System wysyła powiadomienie po zmianie metody wprowadzania.

Najpierw zadeklarować funkcję, aby otrzymać powiadomienie:

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

Następnie zarejestrować się na powiadomienie o zmianie:

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