2012-10-27 3 views
0

Bonjour, Je voudrais obtenir la liste de tous les caractères disponibles du clavier (Alphabétique numérique) afin de créer un NSArray. J'utilise ces lignes, mais je ne trouve pas la bonne fonction pour lister les caractères.Récupérer la liste des caractères disponibles au clavier

J'ai aussi essayé cette ligne:

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

Cette dernière ligne semble être la bonne chose à appeler ('TISPropertyUnicodeKeyLayoutData'). Quel était le problème avec ça? – user1118321

+0

Bonjour et merci. Je n'ai pas réussi à convertir le résultat de cette fonction, et je n'ai trouvé aucune réponse valide. –

+0

J'ai ajouté une réponse ci-dessous. – user1118321

Répondre

0

Seriez-vous en mesure d'obtenir d'appeler:

TISGetInputSourceProperty(source, kTISPropertyUnicodeKeyLayoutData); 

qui renverra les données « uchr » pour la disposition du clavier (si elle existe), en tant que CFDataRef. Vous pouvez lire sur la disposition des données «uchr» here. Vous devrez obtenir les octets du CFDataRef, probablement en appelant quelque chose comme CFDataGetBytes() ou CFDataGetBytePtr().

+0

Je ne sais pas comment lire les informations contenues dans CFDataRef. J'ai ajouté les nouvelles lignes ci-dessous. –

+0

Ce que vous avez est correct. Vous avez obtenu les données 'uchr' dans un tampon. Vous pouvez maintenant le décoder en utilisant [ces documents décrivant le format] (https://developer.apple.com/library/mac/#documentation/Carbon/reference/Unicode_Utilities_Ref/uu_app_uchr/uu_app_uchr.html). – user1118321

+0

C'est exactement ce que je veux savoir, mais je ne parviens pas à utiliser ce code. avez-vous un exemple pour moi d'afficher des informations contenues dans le tampon? –

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 
        ); 

Comment lire l'information contenue dans CFDataRef?

Questions connexes