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

时间:2013-09-19 07:57:53

标签: c# keycode alt ctrl

我收到了关于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的情况下执行此操作?有谁知道为什么或能给我一个提示?

干杯

编辑:我以这种方式阻止所有其他键: Blocking shortcut keys using c#

3 个答案:

答案 0 :(得分:3)

免责声明:我在用户输入课程方面经验不足,但这是我的意见。

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资源:

How to use multiple modifier keys in C#

Determine whether modifier key was pressed

答案 1 :(得分:1)

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

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;
}

答案 2 :(得分:1)

您是否尝试过检查修改键?如下。

请注意,这是针对WPF的,因为你没有说明win form或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");
}

干杯。

相关问题