我有一个可以捕获键盘键的类,并且我想捕获特定的组合:
Alt + 1
并且如果检测到这种组合是我的工作。
这是我尝试过的:
private bool isAltPressed;
private bool isOnePressed;
private bool bothPressed;
private void HookManager_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.LMenu)
isAltPressed = true;
if (e.KeyCode == Keys.D1)
isOnePressed = true;
if (isAltPressed & isOnePressed)
bothPressed = true;
}
private void HookManager_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (bothPressed)
// Do something...
if (e.KeyCode == Keys.LMenu)
{
isAltPressed = false;
bothPressed = false;
}
if (e.KeyCode == Keys.D1)
{
isOnePressed = false;
bothPressed = false;
}
}
所以我需要在哪里验证两个键都被按下并释放,然后再执行我的工作?
尝试一下:
if ( e.KeyData == (Keys.Alt | Keys.D1) )
键是具有标志属性的结构。
这意味着可以将几个键代码与逻辑或运算符组合在一起以形成结果。
[Flags]
public enum Keys ...
您不应该等待释放Alt键来执行操作。除非您能解释为什么您需要确保在“做某事”之前必须同时释放Alt键和按下的键,否则以下代码在KeyUp
或KeyDown
事件中就足够了。
if (e.Modifiers == Keys.Alt && e.KeyCode == Keys.D1)
{
// Do Something
}