键盘挂钩- internet explorer问题
本文关键字:explorer 问题 internet 键盘 | 更新日期: 2023-09-27 18:07:57
我正在为Internet Explorer
和其他应用程序编写一个执行键盘钩子的应用程序。除了一个恼人的问题,一切都很好。
在ie浏览器中,我更改了活动语言,在HTML文档的文本框中写入,说成希伯来语或阿拉伯语,但是在我的钩子应用程序中,我一直得到英文字符
在Internet explorer中,HTML文档字符以正确的语言显示,但在应用程序中,我一直只得到英语。
例如:
当我在ie中按下"abcאבג"
时,我在钩子应用程序中得到"abctcd"
。
当我尝试连接Word、Excel、Firefox或Chrome等其他程序时,一切都像预期的那样运行。
我最近用一些代码回答了一个问题,例如:
- c# 记录击键时输入特殊字符时显示的双字符
你需要注意的是,你的钩子程序可能不知道当前的IME,不像Work或Excel。因此,您首先需要知道用户切换了IME,并指定相应的键盘布局。API ActivateKeyboardLayout可以做到这一点。
在你知道键盘布局之后,你可以在你的钩子程序中通过调用ToUnicodeEx或ToAsciiEx来获得相应的字符,ActivateKeyboardLayout返回给你的HKL
指示特定的键盘布局。
有关概述的详细信息,请参见关于MSDN上的键盘输入。
我怀疑问题更严重。
我写了以下代码:
IntPtr handle = new IntPtr(-1);
handle = GetForegroundWindow();
uint tpid = GetWindowThreadProcessId(handle, IntPtr.Zero);
IntPtr hKL = GetKeyboardLayout(tpid);
hKL = (IntPtr)(hKL.ToInt32() & 0x0000FFFF);
lbl1.Content = hKL.ToString();
这个问题只发生在IE(我检查了版本7,8,9和10),只在HTML TextBox控件。
在url的一切工作如预期的(如在所有其他应用程序,如word excel firefox, chrome等),如果我写在希伯来语显示我1037,并在希伯来语中显示正确的字符,如果我写在英语它显示我1033,并在英语中显示正确的字符,如果我开始用希伯来语书写,pass English仍然会继续显示正确的hkl值和正确的字符。
到目前为止还好。
只有当我在HTML文本框中输入时才会出现问题只有这样,它才不能识别正确的语言。
当我在HTML的文本框中输入时,他识别出正确的语言和正确的第一个字符的hkl值,当我更改语言时,他不识别更改并继续向我发送第一个字符输入的语言的字符。