已经提出了类似的问题,所以我不会浪费时间重新解释它,现在的讨论可以在这里找到: ToAscii/ToUnicode in a keyboard hook destroys dead keys
我发布一个新问题的原因是我似乎遇到了一个“解决方案”,但我不太确定如何实现它。
这篇博文似乎提出了ToUnicode杀死死键支持问题的解决方案: http://www.siao2.com/2005/01/19/355870.aspx
但是我不确定如何实施建议的解决方案。推动正确的方向将非常受欢迎。
要清楚,我所指的部分是:
有两种方法可以解决这个问题:
1)您可以继续使用相同的信息调用ToUnicode,直到它被清除,然后再次调用它以将状态恢复到原来的状态,如果您从未输入任何内容,或者
2)您可以提前加载所有键盘信息,然后当他们输入信息时,您可以在自己的信息缓存中查找击键的含义,而无需在以后调用API。
我不太确定如何做这些事情(键盘和国际化远非我的强项),所以任何帮助都会非常感激。
由于
答案 0 :(得分:4)
答案的第一部分是完全无信息。但是,第二部分确实有意义。 ToUnicode()
应该是纯函数,它只是作为查找。但事实并非如此。但是您可以针对所有预期的输入重复调用它,将它们存储在您自己的查找表中并访问它。
我建议Microsoft在lookDontTouch
参数中添加wFlags
标记;这将是一个微不足道的非破坏API修复。
答案 1 :(得分:0)
如果您将搜索范围扩大到包含key logging,则可能会得到一些答案。与ToUnicode
相比,链接中显示的方法非常麻烦,但它有效。它围绕从注册表中查找当前活动的键盘布局,然后手动加载和解析正确的DLL。
作为警告,我已经看到装载部分在64位Windows上失败了。