Convertir código de clave virtual a cadena unicode

Tengo un código que he estado usando para obtener la distribución actual del teclado y convertir un código de tecla virtual en una cadena. Esto funciona muy bien en la mayoría de las situaciones, pero tengo problemas con algunos casos específicos. El que trajo esto a la luz es la tecla de acento junto a la tecla de retroceso en los teclados alemanes QWERTZ. @http: //en.wikipedia.org/wiki/File: KB_Germany.svg

Esa clave genera el código VK que esperaríakVK_ANSI_Equal pero cuando uso una distribución de teclado QWERTZ no recibo ninguna descripción. Está terminando como una clave muerta porque se supone que está compuesta con otra clave. ¿Hay alguna forma de detectar estos casos y hacer la conversión adecuada?

Mi código actual está debajo.

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

if(keyboardLayout)
{
    UInt32 deadKeyState = 0;
    UniCharCount maxStringLength = 255;
    UniCharCount actualStringLength = 0;
    UniChar unicodeString[maxStringLength];

    OSStatus status = UCKeyTranslate(keyboardLayout,
                                     keyCode, kUCKeyActionDown, 0,
                                     LMGetKbdType(), kUCKeyTranslateNoDeadKeysBit,
                                     &deadKeyState,
                                     maxStringLength,
                                     &actualStringLength, unicodeString);

    if(actualStringLength > 0 && status == noErr)
        return [[NSString stringWithCharacters:unicodeString length:(NSInteger)actualStringLength] uppercaseString];
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta