我需要使用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_OK
。 http://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
希望这可以帮助。
亲切的问候,
博