我正在为Internet Explorer
和其他应用编写一个执行键盘挂钩的应用程序。除了一个烦人的问题,一切都很好。
在Internet Explorer中,我更改了活动语言并在HTML文档的文本框中写入,比如希伯来语或阿拉伯语,但我仍然在我的挂钩应用中获得英文字符。
在Internet Explorer中,HTML文档字符以正确的语言显示,但在应用程序中我一直只能获得英语。
例如:
当我在Internet Explorer中按"abcאבג"
时,我会在挂钩应用中获得"abctcd"
。
当我尝试连接其他程序(如Word或Excel或Firefox或Chrome)时,一切都按预期工作。
答案 0 :(得分:1)
我最近用一些代码回答了一个问题,例如:
然而,答案是不直接对应于你的答案,只是对于一些示例代码。
您需要注意的是,您的挂钩程序可能不知道当前的IME与Work或Excel不同。因此,您首先需要知道用户切换了IME,并指定了相应的键盘布局。 API ActivateKeyboardLayout可以执行此操作。
在您知道键盘布局之后,您可以通过ToUnicodeEx或ToAsciiEx与ActivateKeyboardLayout返回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值,当我更改语言时,他无法识别更改并继续向我发送第一个字符所用语言的字符打字了。