如何在不破坏死键支持的情况下使用ToUnicode?

时间:2010-04-09 01:24:12

标签: c++ c windows unicode keyboard

已经提出了类似的问题,所以我不会浪费时间重新解释它,现在的讨论可以在这里找到: ToAscii/ToUnicode in a keyboard hook destroys dead keys

我发布一个新问题的原因是我似乎遇到了一个“解决方案”,但我不太确定如何实现它。

这篇博文似乎提出了ToUnicode杀死死键支持问题的解决方案: http://www.siao2.com/2005/01/19/355870.aspx

但是我不确定如何实施建议的解决方案。推动正确的方向将非常受欢迎。

要清楚,我所指的部分是:

  

有两种方法可以解决这个问题:

     

1)您可以继续使用相同的信息调用ToUnicode,直到它被清除,然后再次调用它以将状态恢复到原来的状态,如果您从未输入任何内容,或者

     

2)您可以提前加载所有键盘信息,然后当他们输入信息时,您可以在自己的信息缓存中查找击键的含义,而无需在以后调用API。

我不太确定如何做这些事情(键盘和国际化远非我的强项),所以任何帮助都会非常感激。

由于

2 个答案:

答案 0 :(得分:4)

答案的第一部分是完全无信息。但是,第二部分确实有意义。 ToUnicode() 应该是纯函数,它只是作为查找。但事实并非如此。但是您可以针对所有预期的输入重复调用它,将它们存储在您自己的查找表中并访问它。

我建议Microsoft在lookDontTouch参数中添加wFlags标记;这将是一个微不足道的非破坏API修复。

答案 1 :(得分:0)

如果您将搜索范围扩大到包含key logging,则可能会得到一些答案。与ToUnicode相比,链接中显示的方法非常麻烦,但它有效。它围绕从注册表中查找当前活动的键盘布局,然后手动加载和解析正确的DLL。

作为警告,我已经看到装载部分在64位Windows上失败了。