繁体   English   中英

如何将消息从WH_KEYBOARD_LL转换为corespondig unicode char

[英]How to convert a message from a WH_KEYBOARD_LL to corespondig unicode char

你好我正在写一个多语言的应用程序,我正在使用WH_KEYBOARD_LL钩子。 我没有说明为什么我使用钩子,我尝试了多种东西,但这是最简单,最快速的方法。 现在在钩子proc里面

LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam);

我在LPARAM参数中收到一个KBDLLHOOKSTRUCT ,其中包含按下的键的信息。 是否有任何方法可以根据用户为ex设置的当前键盘布局在unicode字符中对此信息进行协调。 如果用户有一个中文键盘布局设置并且他提出“a”键,那么我会收到一个包含“a”键扫描码的KBDLLHOOKSTRUCT ,我需要将此扫描码转换为相应的unicode字符。 我知道这是可能的,因为你可以在Microsoft Word中用中文写,我只是无法弄清楚如何去做。

谢谢。

ToUnicodeEx()。 除非键盘布局简单,否则它在实践中不起作用。 死钥匙会杀死你。 迈克尔·卡普兰(Michael Kaplan)撰写了一篇关于它的11篇博客序列 ,但他只是放弃了而没有完成它。 看看你可以从中挽救什么,但不要抱有希望。 中文使用输入法编辑器IME。 软件,我认为它通过笔画建立角色。

可能是MapVirtualKeyEx或ToUnicodeEx。 无论如何,我认为MSDN的键盘输入部分的一个功能将包含一个正确的功能(它们的列表很短)。

这种转变很复杂。 即使是简单的死键也很难处理,使用IME时非常难看。

考虑拦截输入控件接收已转换字符的消息。 但当然,编码更加丑陋。

问题是普通的消息钩子需要dll注入到目标进程中,并且该dll不应该用C#编写。 但也许还有一些其他消息拦截API无需dll注入即可运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM