3

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

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

4

3 回答 3

2

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

但是,如果您必须使用Alt密钥,我会查看这篇文章,它使用消息过滤器尝试在应用程序级别拦截它。

如果这不能满足您的要求,您可能需要查看 Global hooks,此链接将使您开始走上这条路。全局挂钩通常被认为是邪恶的,因此只有在上述两个建议不起作用时才应该使用它。您必须确保卸载挂钩,否则您可能会发现需要经常重新启动计算机以修复奇怪的键盘问题。

于 2013-02-26T14:15:15.797 回答
2

这对我有用:

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

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

Application.AddMessageFilter(new AltKeyFilter());
于 2016-02-23T17:34:18.800 回答
1

你可以尝试这样的事情:

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 = true. https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.keyeventargs.suppresskeypress?view=windowsdesktop-5.0

于 2021-11-05T10:03:32.720 回答