macos – 将虚拟密钥代码转换为unicode字符串

macos – 将虚拟密钥代码转换为unicode字符串,第1张

概述我有一些代码,我一直用来获取当前的键盘布局,并将虚拟键码转换为字符串.这在大多数情况下都很有效,但我遇到了一些特定情况的问题.引起这种情况的是德国QWERTZ键盘上退格键旁边的重音键. http://en.wikipedia.org/wiki/File:KB_Germany.svg 该密钥生成VK代码我期望kVK_ANSI_Equal但是当使用QWERTZ键盘布局时,我没有得到任何描述.它最终成为 我有一些代码,我一直用来获取当前的键盘布局,并将虚拟键码转换为字符串.这在大多数情况下都很有效,但我遇到了一些特定情况的问题.引起这种情况的是德国QWERTZ键盘上退格键旁边的重音键. http://en.wikipedia.org/wiki/File:KB_Germany.svg

该密钥生成VK代码我期望kVK_ANSI_Equal但是当使用QWERTZ键盘布局时,我没有得到任何描述.它最终成为死键,因为它应该由另一个键组成.有没有办法捕捉这些情况并进行适当的转换?

我目前的代码如下.

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,LMGetKbdType(),kUCKeyTranslateNoDeadKeysBit,&deadKeyState,maxStringLength,&actualStringLength,unicodeString);    if(actualStringLength > 0 && status == noErr)        return [[Nsstring stringWithCharacters:unicodeString length:(NSInteger)actualStringLength] uppercaseString];}
解决方法 该键是一个死键,您可以看到自己是否尝试过,或者查看具有德语布局的键盘查看器.

在Mac上,输入死键的实际角色而不用另一个角色组成的方法是按下后面的空格.所以试试这个:关闭kUCKeyTranslateNoDeadKeysBit,如果UCKeyTranslate设置了死键状态,则在它之后翻译一个空格.

编辑(由提问者添加)

对于未来的人来说,这里是具有正确解决方案的固定代码.

TISinputSourceRef currentKeyboard = TIScopyCurrentKeyboardinputSource();CFDataRef uchr = (CFDataRef)TISGetinputSourceProperty(currentKeyboard,unicodeString);    if (actualStringLength == 0 && deadKeyState)    {        status = UCKeyTranslate(keyboardLayout,kVK_Space,unicodeString);       }    if(actualStringLength > 0 && status == noErr)        return [[Nsstring stringWithCharacters:unicodeString length:(NSUInteger)actualStringLength] uppercaseString];}
总结

以上是内存溢出为你收集整理的macos – 将虚拟密钥代码转换为unicode字符串全部内容,希望文章能够帮你解决macos – 将虚拟密钥代码转换为unicode字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1034041.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存