使用 c# 禁用 Ctrl 或 Alt 键而不进行注册表

本文关键字:注册表 Alt 禁用 Ctrl 使用 | 更新日期: 2023-09-27 18:32:00

我有一个关于KeyCode和禁用特殊键的问题。我知道这个问题被问了几次,但我没有找到我可以使用的答案,并且哪个有效,所以我来这里问:)

我正在编写一个程序来阻止每个键或组合键(如Alt+F4等)。该应用程序不适合我,而是仅适用于只能在该程序中导航的客户。这一切都工作正常,但我无法禁用Left CTRL, Right CTRL or Alt键。我得到了这个代码来尝试阻止这些键:

private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.LControlKey)
            {
                MessageBox.Show("LCtrl", "Warnung", MessageBoxButtons.OK);
            }
            else if (e.KeyCode == Keys.RControlKey)
            {
                MessageBox.Show("RCtrl", "Warnung", MessageBoxButtons.OK);
            }
            else if (e.KeyCode == Keys.Alt)
            {
                MessageBox.Show("Alt", "Warnung", MessageBoxButtons.OK);
            }
            else if (e.KeyCode == Keys.Delete)
            {
                MessageBox.Show("Delete", "Warnung", MessageBoxButtons.OK);
            }
        }

只使用我可以看到它是否有效的MessageBox.Show();Delete键工作正常,但另一个不能。是否可以在不编辑 registry 和 Win7 的情况下执行此操作?有谁知道为什么或可以给我一个提示?

干杯

编辑:我以这种方式阻止所有其他键:使用 c# 阻止快捷键

使用 c# 禁用 Ctrl 或 Alt 键而不进行注册表

免责声明:我在用户输入类方面经验不多,但这是我的输入。

CTRL 和 ALT 是修饰键的示例。也就是说,它们修改其他(非修饰符)键以创建组合键。您的 UI 可能只能选取完整的组合键。例如:

private void keyPressed(object sender, PreviewKeyDownEventArgs e)
{
    e.KeyCode == Key.A; // True (pressed A)
    e.KeyCode == Key.Control; // False (no key pressed)
    e.Modifiers == Keys.Control; // True (user is pressing the modifier CTRL)
    e.KeyCode == Key.A && e.Modifiers == Keys.Control; (pressed key A with modifier CTRL)
}

至于禁用密钥,您可以捕获e.Modifiers:

private void ignoreCtrl(object sender, PreviewKeyDownArgs e)
{
    if (e.Modifiers != Keys.Control) { /* Pass to handler */ }
    else { /* Discard */ }
}

同样,我对你的特定框架没有经验,但这是我的猜测。我使用了以下 SO 源:

如何在 C# 中使用多个修饰键

确定是否按下了修改键

这应该是一个注释,因为我还没有测试过它,但我需要一些代码作为示例,所以我在这里写。你告诉我它是否有效。

PreviewKeyDownEventArgs 包含其他属性,可用于检查是否按下了一个或多个修饰键。
然后,可以尝试将 IsInputKey 属性设置为 false,以防止进一步处理与修饰键一起按下的任何常规键。

private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
if (e.Control)
{
    MessageBox.Show("Ctrl", "Warnung", MessageBoxButtons.OK);
    e.IsInputKey = false;
}
else if (e.Alt)
{
    MessageBox.Show("Alt", "Warnung", MessageBoxButtons.OK);
    e.IsInputKey = false;
}

您是否尝试过检查修饰键?比如下面。

请注意,这是针对 WPF,因为您没有说明获胜表单或 wpf。

if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
    MessageBox.Show("Control Button Down");
}
else if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
{
    MessageBox.Show("Alt Down");
}

干杯。