我需要使用C ++阻止 alt + shift 键事件,或阻止更改语言的某种方式。
提前致谢。
答案 0 :(得分:6)
我会稍微改变一下。我会在启动时捕获当前的语言设置,而不是将其更改为所需的设置。
在alt + shift的偶数时,我会再次将其设置回所需的类型。
使用网络框架应该很容易。
这是一篇关于操纵语言的简短文章:How to change input language programmatically
msdna上的主要课程:InputLanguage documentation
要实际阻止alt + shift进入Windows系统,你必须使用钩子。
的文章答案 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
,设置*pfAccept
到FALSE
并返回S_OK
。
http://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
希望这有帮助。
亲切的问候,
博