2010-04-09 63 views
5

类似的问题已经被问,所以我不会浪费时间来重新解释它,已有的讨论,可以在这里找到: ToAscii/ToUnicode in a keyboard hook destroys dead keys如何在不破坏密钥支持的情况下使用ToUnicode?

但是我张贴新的问题的原因是,我似乎遇到了“解决方案”,但我不太清楚如何实施它。

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

但是我不知道如何实现建议的解决方案。一个正确的方向推动将不胜感激。

要清楚,我指的是部分是这样的:

有两种方法来解决此问题:

1)您可以保持通话ToUnicode用相同的信息,直到它被清除,然后再拨打一次,将状态恢复到以前没有输入任何内容的状态,或者

2)您可以提前加载所有键盘信息,然后当他们键入信息时可以在您自己的信息缓存中查找按键的意思,而不必迟到调用API河

我不太清楚如何做这些事情(键盘和国际化远不是我的强项),所以任何帮助将不胜感激。

感谢

回答

4

答案的第一部分是完全信息免费。但是,第二部分确实有道理。 ToUnicode()应该已经是一个纯粹的功能,它只是作为一个查找。但事实并非如此。但是您可以为所有预期的输入重复调用它,将它们存储在自己的查找表中并访问它。

我建议Microsoft向wFlags参数添加一个lookDontTouch标志;这将是一个微不足道的API修复。

+5

但修复win32 API将是一个危险的先例。想想如果他们开始*那条路径,他们在他们之前的工作量。 – jalf 2010-04-09 08:59:01

+0

@jalf:我不确定这是否讽刺。 Windows的i18n/l10n正在积极开发中。对于这个特殊的位,他们可能不需要.Net代码(键盘处理是相当低级的),所以修复Win32 API是一个合理的建议,可能是唯一的方案。 – MSalters 2010-04-09 10:47:14

+0

代码示例的任何机会将我推向正确的方向?我很尴尬地说我还有点迷路。呃,我非常讨厌这个键盘的东西。谢谢。 – RaptorFactor 2010-04-09 15:28:43

0

如果您扩大搜索范围,包括key logging,您可能会收到一些答案。链接中显示的方法与ToUnicode相比非常繁琐,但它的工作原理。它会围绕从注册表中查找当前活动的键盘布局,然后手动加载并分析正确​​的DLL。

作为警告的提示,我已经看到加载部分在64位Windows上惨败。

+0

我运行了一些快速测试,似乎代码确实在x64版本的Windows下失败,除非代码是本机编译为x64的。 呃,这是屁股上所有这样的痛苦。 但是,谢谢,这看起来是一个有趣的选择。 – RaptorFactor 2010-05-11 15:43:18

相关问题