Converte o código da chave virtual para a string unicode

Eu tenho um código que estou usando para obter o layout atual do teclado e converter um código de chave virtual em uma string. Isso funciona muito bem na maioria das situações, mas estou tendo problemas com alguns casos específicos. O que trouxe isso à tona é a tecla de acentuação ao lado da tecla backspace nos teclados alemães QWERTZ.http: //en.wikipedia.org/wiki/File: KB_Germany.svg

Essa chave gera o código VK que eu esperariakVK_ANSI_Equal mas ao usar um layout de teclado QWERTZ, não recebi nenhuma descrição. Está terminando como uma chave morta, porque deveria ser composta por outra chave. Existe alguma maneira de capturar esses casos e fazer a conversão adequada?

Meu código atual está abaixo.

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

questionAnswers(1)

yourAnswerToTheQuestion