繁体   English   中英

使用C#禁用没有注册表的Ctrl或Alt键

[英]Disable Ctrl or Alt key without registry using c#

我有一个关于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#阻止快捷键

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

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

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

干杯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM