2012-10-27 33 views
0

嗨, 我想從鍵盤(數字字母)中獲得所有可用字符的列表以創建一個NSArray。獲取鍵盤上可用字符的列表

TISInputSourceRef source = TISCopyCurrentKeyboardInputSource(); 
NSLog(@"languages: %@", TISGetInputSourceProperty(source,  kTISPropertyInputSourceLanguages)); 
NSLog(@"localized name: %@", TISGetInputSourceProperty(source, kTISPropertyLocalizedName)); 

我使用這些行,但找不到正確的函數來列出字符。

我也試過這條線:

NSLog(@"List: %@", TISGetInputSourceProperty(source, kTISPropertyUnicodeKeyLayoutData)); 
+0

最後一行似乎是正確的調用('TISPropertyUnicodeKeyLayoutData')。它有什麼問題? – user1118321

+0

你好,謝謝。我還沒有設法轉換這個函數的結果,我沒有找到有效的迴應。 –

+0

我在下面添加了回覆。 – user1118321

回答

0

你能夠從調用得到它:

TISGetInputSourceProperty(source, kTISPropertyUnicodeKeyLayoutData); 

這將返回「uchr」數據鍵盤佈局(如果存在的話),作爲CFDataRef。您可以閱讀關於'uchr'數據的佈局here。您需要從CFDataRef獲取字節,可能是撥打CFDataGetBytes()CFDataGetBytePtr()

+0

我不知道如何讀取CFDataRef中包含的信息。我在下面添加了新行。 –

+0

你得到的是正確的。您已將'uchr'數據存入緩衝區。現在您可以使用[這些描述格式的文檔]將其解碼(https://developer.apple.com/library/mac/#documentation/Carbon/reference/Unicode_Utilities_Ref/uu_app_uchr/uu_app_uchr.html)。 – user1118321

+0

這正是我想知道的,但我未能使用此代碼。 你有沒有一個例子讓我顯示緩衝區中包含的信息? –

0
TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource(); 
    CFDataRef uchr = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData); 
    const UCKeyboardLayout *keyboardLayout = (const UCKeyboardLayout*)CFDataGetBytePtr(uchr); 

    Byte* buffer = 
    (Byte*) malloc (sizeof(Byte) * CFDataGetLength(uchr)); 



    CFDataGetBytes(
        uchr, 
        CFRangeMake(0,CFDataGetLength(uchr)), 
        buffer 
        ); 

如何讀取CFDataRef中包含的信息?