在录制按键时抑制全局窗口快捷方式
Posted
技术标签:
【中文标题】在录制按键时抑制全局窗口快捷方式【英文标题】:Suppressing global windows shortcuts while recording keypresses 【发布时间】:2015-08-30 21:13:21 【问题描述】:是否可以在录制按键时抑制 windows 全局快捷键?
我有一个用 c# 编写的 Windows 窗体应用程序,并使用这个库来记录按键以便以后在宏中使用。现在,当我记录 Windows 使用的组合键(即 L Control + Win + Right Arrow 以更改 Win 10 上的虚拟桌面)时,我希望我的应用程序记录它,但在我记录时避免 Windows 实际使用它很烦人。
我有一个复选框可以在点击事件时启用键捕获
m_KeyboardHookManager.KeyDown += HookManager_KeyDown;
HookManager_KeyDown 就是这样
private void HookManager_KeyDown(object sender, KeyEventArgs e)
Log(string.Format("KeyDown \t\t 0\n", e.KeyCode));
string [] sArr = new string [2];
if (keyBindingArea1.Text != "")
sArr[0] = keyBindingArea1.Text;
sArr[1] = string.Format("0", e.KeyCode);
keyBindingArea1.Text = string.Join("+", sArr);
else
keyBindingArea1.Text = string.Format("0", e.KeyCode);
在 comboText 控件中显示组合键。 (此代码直接取自软件包附带的演示。
现在录制效果很好,例如我按下 L Control + Win,然后松开按键并按下第三个键(即右箭头),这不会触发 Windows 快捷方式,但让它像这样工作很烦人那个。
感谢任何帮助。谢谢
【问题讨论】:
【参考方案1】:尝试使用事件的e.Handled
属性。如果将其设置为true
,它将终止密钥处理链。通常,处理链中的其他应用程序不会得到它。我不确定它是否适用于像虚拟桌面切换这样的低级别 Windows 人员。
private void OnKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
bool isThirdKey = //Some state evaluation to detect the third key was pressed
if (isThirdKey) e.Handled = true;
【讨论】:
我已经尝试过了,但是没有用。例如,它检测到我正在按下左 Win 键,但它不会抑制它。我用过的代码:if (e.KeyCode == Keys.LWin || e.KeyCode == Keys.RWin) e.Handled = true;
尝试一些简单的键,比如说'a'。启动您的应用程序并在记事本中键入“a”-s。您将看到“a”被正确抑制。然后打开让我们说 Microsoft Word 并重复相同的操作。您会发现抑制不适用于 Word。原因是Word本身使用了钩子,你没有机会压制它。正如我所说,某些应用程序不能被“欺骗”。在这篇文章中查看@Hans Passant 的 cmets:***.com/questions/31054486/…以上是关于在录制按键时抑制全局窗口快捷方式的主要内容,如果未能解决你的问题,请参考以下文章