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

Block alt+shift event or disable changing language in programming way

本文关键字:方式中 编程 语言 alt+shift 事件 阻止      更新时间:2023-10-16

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

提前谢谢。

我会以

不同的方式去做。我会在启动时捕获当前的语言设置,而不是将其更改为所需的语言设置。

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

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

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

msdna 上的主类:输入语言文档

要真正防止alt+shift进入Windows系统,你必须使用钩子。

这是一篇关于在窗口处理击键之前阻止击键的文章。

只是一个想法。您可以捕获WM_KEYDOWN消息并调用激活键盘布局以切换语言。

使用C++,您可以安装像此处建议的那样的键盘挂钩程序,并过滤(吞下/不传播(您要禁止的键。

我对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_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-Hookshttp://www.codeproject.com/Articles/9513/Disable-keyboard-and-show-images-for-the-children

希望这有帮助。

亲切问候