【问题标题】:Block alt+shift event or disable changing language in programming way阻止 alt+shift 事件或以编程方式禁用更改语言
【发布时间】:2012-05-03 09:39:36
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 你说的是Windows吗?如果是这样,请添加适当的标签。
  • 如果你这样做,你的用户会恨你的。你确定要那个吗?
  • 我有使用 VNC 的程序,我需要阻止在客户端更改语言。
  • 忽略无效输入字符(来自其他语言)不是比强迫用户不要更改语言更有意义吗?问题是,即使你不让我更改语言,我仍然可以从我自己的语言中复制粘贴文本。我也可能只安装了一种语言,而且不是英语。如果您禁用 ALT+Shift,您只需确保我永远不会切换到英语!
  • 那么,您实际上希望语言切换发生在服务器上而不是客户端上?您想要实现的最终目标是什么? (请注意,阻止 Alt+Shift 只会阻止切换键盘布局的最常见方式 - 在我的脑海中,我可以想到其他三个内置在操作系统中的,以及另外三个可以通过一点点完成的努力。)

标签: c++ windows events keyevent


【解决方案1】:

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

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

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

这里有一篇关于操纵语言的短文:How to change input language programmatically

msdna 上的主类:InputLanguage documentation

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

这是一篇关于blocking keystrokes before windows process them.的文章

【讨论】:

    【解决方案2】:

    只是一个想法。你可以抓到WM_KEYDOWN消息并拨打ActivateKeyboardLayout切换语言。

    【讨论】:

    • 要扩展,您的 VNC 客户端可以查找语言更改并重新更改。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我对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_OKhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms628770(v=vs.85).aspx

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

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

      【讨论】:

        【解决方案5】:

        您尝试实现的是键盘挂钩。 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

        希望这会有所帮助。

        亲切的问候,

        【讨论】:

          猜你喜欢
          • 2012-01-13
          • 1970-01-01
          • 1970-01-01
          • 2018-08-09
          • 2012-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多