你好我正在写一个多语言的应用程序,我正在使用WH_KEYBOARD_LL
钩子。 我不知道为什么我使用钩子,我尝试了很多东西,但这是最简单快速的方法。 现在在钩子程序里面
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam);
我在LPARAM
参数中收到一个KBDLLHOOKSTRUCT
,其中包含所按键的信息。 有没有什么办法可以根据用户为前者设置的当前键盘布局来以unicode字符来演奏这些信息。 如果用户有一个中文键盘布局设置,他偏爱“a”键然后我收到一个KBDLLHOOKSTRUCT
包含“a”键扫描代码,我需要将此扫描代码转换为相应的unicode字符。 我知道这是可能的,因为你可以在Microsoft Word中用中文写,我只是不知道该怎么做。
谢谢。
ToUnicodeEx()。 除非键盘布局简单,否则它在实践中不起作用。 死钥匙是杀死你的东西。 迈克尔·卡普兰(Michael Kaplan)写了一篇关于它的11部分的博客系列 ,但是他没有完成就放弃了。 看看你能从中拯救什么,但不要抱有希望。 中文使用输入法编辑器IME。 软件,我认为它通过笔画来建立角色。
可能是像MapVirtualKeyEx或ToUnicodeEx。 无论如何,我认为从MSDN的键盘输入部分的函数将包含一个适当的功能(它们的列表是短)。
这种转换很复杂。 即使简单的deadkeys是烦人的处理,而使用IME时变得非常丑陋。
考虑拦截输入控件接收已经转换的字符的消息。 但是,这当然是更加丑陋的代码。
问题是一个正常的消息钩子需要DLL注入到目标进程中,并且该DLL不应该用C#编写。 但也许有一些其他的消息拦截API,无需注入DLL。