3

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

提前致谢。

4

5 回答 5

6

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

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

用net框架应该很容易做到。

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

msdna 上的主类:InputLanguage 文档

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

这是一篇关于在 Windows 处理它们之前阻止击键的文章。

于 2012-05-15T09:46:44.307 回答
3

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

于 2012-05-10T08:49:12.433 回答
1

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

于 2012-05-16T05:39:22.727 回答
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 返回。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms628770(v=vs.85).aspxFALSES_OK

以上都有问题。如果用户有意更改客户端上的语言,例如通过单击客户端的任务栏而不是按 Alt+Shift,则上述方法将阻止其更改。

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

于 2012-05-16T06:28:53.070 回答
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-为了孩子

希望这可以帮助。

亲切的问候,

于 2012-05-17T08:02:07.243 回答