【发布时间】:2020-10-30 23:27:48
【问题描述】:
我正在使用一个实现,它对同时按下键 Ctrl + Alt + Shift + D 做出反应同时超过2个月从来没有任何问题。两天前,我体验到这条捷径不再起作用(在发布的版本上也不起作用,这肯定是个问题!)。 => 重新启动 PC 最终完成了它的工作,它再次工作......好吧......也许(并且希望)是一个自发的 Windows 问题。
做梦吧,今天又是同样的问题,这次重启并没有解决。所以让我们来处理它。
这是我的实现:
private void MainWindow_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.D
&& e.Control == true
&& e.Alt == true
&& e.Shift == true)
{
// do things
}
}
正如我上面提到的,它在经常使用之前工作可靠。
到目前为止我发现的是,按下键 Ctrl + Alt + Shift 的“MainWindow_KeyDown”功能是每次都按预期调用。按下 D 也不再触发此函数,这是出乎意料的(仅按下 D 时会调用此函数。
删除“选项”键之一似乎有效(例如 Ctrl + Alt + D)。但是一旦我按下了所有三个选项键(即 Ctrl + Alt + Shift),它不会对按下的其他键做出反应。
当 Ctrl + Alt 时,为什么函数“MainWindow_KeyDown”对 D(或任何其他)没有反应(“不再”) + Shift 已经按下了吗?
q&d 解决方法是替换
e.KeyCode == Key.D
通过
Keyboard.IsKeyDown(Key.D) == true
只要 D 不是最后一次按下的键,它就可以工作(因为如上所述,当按下 Ctrl 键时它不会进入此功能+ Alt + Shift 已经)。
我也尝试了以下实现,但结果相同(否定):
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Control | Keys.Alt | Keys.Shift | Keys.D))
{
MessageBox.Show("Short cut found");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
有没有遇到过类似情况的人? 非常感谢您的任何意见。
【问题讨论】:
-
如果
Form.KeyPreview设置为true,则第一个sn-p 可以工作,ProcessCmdKey在任何情况下都可以工作 (if (keyData.HasFlag(Keys.Control | Keys.Alt | Keys.Shift | Keys.D)) { ... }),即使控件使用具有类似键的加速器. -
如前所述,它的工作原理如上所述(它仍然可以在我的同伴电脑上工作。这让我再次相信这是联想X1 键盘驱动程序问题或类似问题)。 “Form.KeyPreview”没有改变它的行为。谢谢您的意见!
-
我有一个客户端,其 MS Word 宏分配给 Alt+Ctrl+Shift+D。这条捷径已经运行多年,没有遇到任何问题。突然间,客户告诉我这个快捷方式在他们的一台电脑上不起作用。我查看了 PC,快捷方式分配仍然存在,但按下组合键没有任何作用。尝试 Alt+Ctrl+Shift 与各种随机字母都注册 - 除了 F。也许最近的一些 Windows 更新以某种方式破坏了这两个组合键的工作? PC 是戴尔 Optiplex 3050 micro。
-
更新:我测试了其他几台 PC,使用 MS Word 自定义键盘屏幕查看它是否识别 Alt+Ctrl+Shift+D 快捷键组合。我试过的所有 Win10 电脑都不工作。我有一台 Win7 开发 PC,但它确实可以工作。 (这里有一些时髦的行为:我正在从 Win10 PC 进入 Win7 PC。当 RDP 全屏运行时它可以工作。当 RDP 处于窗口模式时,它不起作用。)所以我的理论是这种变化是由于最近的更新。
标签: c# winforms keyboard-shortcuts