c# - 使用 c# 在没有注册表的情况下禁用 Ctrl 或 Alt 键

标签 c# keycode alt ctrl

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

我正在编写一个程序来阻止每个键或组合键(如 Alt+F4 等)。该应用程序不适合我,它适用于只能在此程序中导航的客户。一切正常,但我无法禁用 Left CTRL、Right CTRL 或 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#

最佳答案

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

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

至于禁用 key ,你可以捕获 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

关于c# - 使用 c# 在没有注册表的情况下禁用 Ctrl 或 Alt 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18889149/

相关文章:

c# - 在 C# 中为同步/异步任务添加重试/回滚机制的最佳方法是什么?

c# - .NET 3D,从哪里开始?

javascript - 如何将列表从 Controller 传递到 View 和显示

C# - 在 LINQ sum 方法中计算值时应该无法访问代码

c++ - 有没有办法从 C++ 中的 char 获取虚拟键码?

html - 为 SEO 准备基于图像的网页设计的最佳技术 - noscript?

java - 如何获得字符键的唯一键码

javascript - event.keycode 在 Firefox 中未返回正确的值

javascript - 在javascript中为图像添加alt属性

python - Python 中具有 native 线程的 CSP channel