【问题标题】:Disable normal behavior of Alt key禁用 Alt 键的正常行为
【发布时间】:2013-02-12 00:21:17
【问题描述】:

当按下 Alt 键时,焦点通常会转到窗口的菜单。我需要全局禁用它。因为我的应用程序使用 Alt 键。当用户同时按下某个键和 Alt 键时,我的应用程序会向活动应用程序发送另一个键。所以我只需要在打开菜单时忽略 Alt

我是编程新手,我正在寻找 VB.Net 或 C# 代码。

【问题讨论】:

  • 是 Windows 窗体应用程序还是 WPF?
  • @imanabid Windows 窗体应用程序

标签: c# vb.net winforms hook keyboard-shortcuts


【解决方案1】:

我的第一个答案是在您的程序中使用 Alt 键,而改为使用 Ctrl。阻止“正常”的事情发生通常会导致未来的痛苦。

但如果您必须使用 Alt 键,我会查看 this article,它使用消息过滤器尝试在应用程序级别拦截它。

如果这不能满足您的要求,您可能需要查看全局挂钩,this link 将帮助您开始前进。全局挂钩通常被认为是邪恶的,因此只有在上述两个建议不起作用时才应该使用它。您必须确保卸载挂钩,否则您可能会发现需要经常重启计算机才能解决奇怪的键盘问题。

【讨论】:

  • 我正在制作字符自动更正应用程序。使用记事本、写字板等应用程序。如果我为此使用 Ctrl 键,它可能会与 Ctrl+A、Ctrl+B 等混淆。我认为您的第一个建议对我有帮助。感谢您的回复
  • @JumRemdesk 以何种方式忽略 Alt 不会导致普通 Alt、Alt+F 等出现问题?另外,标准问题是,如果两个应用程序这样做了怎么办?是什么让您的应用程序比其他应用程序更特别?既然你提到你实际上并没有在普通的 Alt 上做任何事情,我认为使用RegisterHotKey 可能会更好,并让最终用户自定义要使用的热键。但我假设你比我更了解你的最终用户。
  • 它只会忽略菜单的 AltGr。我的应用程序自动更正当地语言而不是英语的某些字符。例如:当用户按下 AltGr+B 时,它将替换为 'ï' 这是我当地语言的特殊字符。用户无法正常输入。
【解决方案2】:

这对我有用:

    private class AltKeyFilter : IMessageFilter
    {
        public bool PreFilterMessage(ref Message m)
        {
            return m.Msg == 0x0104 && ((int)m.LParam & 0x20000000) != 0;
        }
    }

然后你像这样添加消息过滤器:

Application.AddMessageFilter(new AltKeyFilter());

【讨论】:

    【解决方案3】:

    你可以试试这样的:

    public void HandleKeyDown(object sender, keyEventArgs e)
    {
      //do whatever you want with or without Alt
      
      if (e.Modifiers == Keys.Alt)
        e.SuppressKeyPress = true;
    }
    

    这应该允许您将 Alt 用于您想要的任何东西,但不要激活菜单条。注意e.SuppressKeyPress = true 也设置e.Handled = truehttps://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.keyeventargs.suppresskeypress?view=windowsdesktop-5.0

    【讨论】:

      猜你喜欢
      • 2012-03-26
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 2015-07-24
      相关资源
      最近更新 更多