阻止alt + shift事件或禁用以编程方式更改语言

时间:2012-05-03 09:39:36

标签: c++ windows events keyevent

我需要使用C ++阻止 alt + shift 键事件,或阻止更改语言的某种方式。

提前致谢。

5 个答案:

答案 0 :(得分:6)

我会稍微改变一下。我会在启动时捕获当前的语言设置,而不是将其更改为所需的设置。

在alt + shift的偶数时,我会再次将其设置回所需的类型。

使用网络框架应该很容易。

这是一篇关于操纵语言的简短文章:How to change input language programmatically

msdna上的主要课程:InputLanguage documentation

要实际阻止alt + shift进入Windows系统,你必须使用钩子。

以下是关于blocking keystrokes before windows process them.

的文章

答案 1 :(得分:3)

只是一个想法。您可以抓住WM_KEYDOWN消息并致电ActivateKeyboardLayout来切换语言。

答案 2 :(得分:1)

使用C ++,你可以安装一个键盘钩子程序,如建议的here,并过滤(吞下/不传播)你想要禁止的键。

答案 3 :(得分:1)

我对MSDN的理解是你可以假装处理WM_INPUTLANGCHANGEREQUEST然后什么都不做,这样Windows就不会做任何进一步的事情,语言实际上不会改变。但有些用户表示不再适用。 http://msdn.microsoft.com/en-us/library/ms632630(VS.85).aspx

也许你可以实现ITfInputProcessorProfileActivationSink::OnActivated,当你被召唤时,你可以通过调用ITfInputProcessorProfiles::ActivateLanguageProfile来改回以前的语言。在应用开始时,您可以拨打ITfInputProcessorProfiles::GetActiveLanguageProfile

也许您可以实施ITfLanguageProfileNotifySink::OnLanguageChange,设置*pfAcceptFALSE并返回S_OKhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms628770(v=vs.85).aspx

以上所有都有问题。如果用户故意更改客户端上的语言,例如通过单击客户端的任务栏而不是按Alt + Shift,上述方法将阻止他们进行更改。

我想知道RegisterHotKey是否允许您为自己的窗口注册Alt + Shift,即使系统已经定义了它。

答案 4 :(得分:0)

您尝试实现的是键盘钩子。可以在此处找到C / C ++中源代码的详细说明: http://www.codeproject.com/Articles/67091/Mouse-and-KeyBoard-Hooking-utility-with-VC

此处还可以找到其他有用的例子:
http://www.codeproject.com/Articles/1264/KeyBoard-Hooks
http://www.codeproject.com/Articles/9513/Disable-keyboard-and-show-images-for-the-children

希望这有帮助。

亲切的问候,