键盘挂钩- internet explorer问题

本文关键字:explorer 问题 internet 键盘 | 更新日期: 2023-09-27 18:07:57

我正在为Internet Explorer和其他应用程序编写一个执行键盘钩子的应用程序。除了一个恼人的问题,一切都很好。

在ie浏览器中,我更改了活动语言,在HTML文档的文本框中写入,说成希伯来语或阿拉伯语,但是在我的钩子应用程序中,我一直得到英文字符

在Internet explorer中,HTML文档字符以正确的语言显示,但在应用程序中,我一直只得到英语。

例如:

当我在ie中按下"abcאבג"时,我在钩子应用程序中得到"abctcd"

当我尝试连接Word、Excel、Firefox或Chrome等其他程序时,一切都像预期的那样运行。

键盘挂钩- internet explorer问题

我最近用一些代码回答了一个问题,例如:

  • 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值,当我更改语言时,他不识别更改并继续向我发送第一个字符输入的语言的字符。