我收到了关于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#
答案 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资源:
答案 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");
}
干杯。