键盘挂钩 - 互联网资源管理器问题

时间:2013-04-07 07:52:32

标签: c# internet-explorer keyboard hook

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

在Internet Explorer中,我更改了活动语言并在HTML文档的文本框中写入,比如希伯来语或阿拉伯语,但我仍然在我的挂钩应用中获得英文字符

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

例如:

当我在Internet Explorer中按"abcאבג"时,我会在挂钩应用中获得"abctcd"

当我尝试连接其他程序(如Word或Excel或Firefox或Chrome)时,一切都按预期工作。

2 个答案:

答案 0 :(得分:1)

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

然而,答案是直接对应于你的答案,只是对于一些示例代码。

您需要注意的是,您的挂钩程序可能不知道当前的IME与Work或Excel不同。因此,您首先需要知道用户切换了IME,并指定了相应的键盘布局。 API ActivateKeyboardLayout可以执行此操作。

在您知道键盘布局之后,您可以通过ToUnicodeExToAsciiExActivateKeyboardLayout返回About Keyboard Input来获取挂钩程序中的相应字符表示特定的键盘布局。

有关概述的详细信息,请参阅MSDN上的{{3}}。

答案 1 :(得分:0)

我怀疑问题更严重。

我写了以下代码:

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控件中出现。

在网址上一切都按预期工作(如所有其他应用程序,如单词excel firefox,chrome等),如果我用希伯来语写我1037并在希伯来语中显示正确的字符,如果我用英文写它显示我1033并用英语显示正确的字符, 如果我开始用希伯来语写作,通过英语仍然会继续显示正确​​的hkl值和正确的字符。

到目前为止还没有。

只有在我输入HTML文本框时才会出现问题 只有这样它才能识别出正确的语言。

当我输入HTML的文本框时,他会识别正确的语言并更正第一个字符的hkl值,当我更改语言时,他无法识别更改并继续向我发送第一个字符所用语言的字符打字了。