我需要使用 C++ 阻止alt+shift键事件,或者以某种方式阻止更改语言。
提前致谢。
我会有所不同。我会在启动时捕获当前的语言设置,而不是更改为所需的语言设置。
在 alt+shift 的时候,我会再次将其设置回所需的类型。
用net框架应该很容易做到。
这是一篇关于操作语言的简短文章:如何以编程方式更改输入语言
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
返回。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms628770(v=vs.85).aspxFALSE
S_OK
以上都有问题。如果用户有意更改客户端上的语言,例如通过单击客户端的任务栏而不是按 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-为了孩子
希望这可以帮助。
亲切的问候,
博