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

我需要使用C ++来阻止alt + shift事件,或者阻止不断变化的语言。

提前致谢。

我会有点不同。 我会在启动时捕捉当前的语言设置,而不是将其更改为所需的语言设置。

甚至在alt + shift我只是将其设置回到所需的类型。

网络框架应该是神仙容易的。

以下是关于操作语言的简短文章: 如何以编程方式更改输入语言

和msdna上的主要类: InputLanguage文档

为了防止alt + shift进入windows系统,你必须使用钩子。

这里有一篇关于在Windows处理之前阻止按键的文章。

只是一个想法。 您可以捕获WM_KEYDOWN消息并调用ActivateKeyboardLayout来切换语言。

使用C ++,你可以安装一个类似于这里建议的键盘钩子程序,并过滤(吞/不传播)你想禁止的键。

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

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

也许你可以实现ITfLanguageProfileNotifySink::OnLanguageChange ,将*pfAccept设置为FALSE并返回S_OKhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms628770(v=vs.85).aspx

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

我不知道是否RegisterHotKey会让你注册Alt + Shift为你自己的窗口,即使系统已经定义了它。

你正在试图实现的东西是键盘钩子。 在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

希望这可以帮助。

亲切的问候,