我想编写简单的program
,例如在我要登录网站并发现this项目在监听键盘的情况下,将用户名和密码发送到某些地方。
所以我有这个功能:
private void HookManager_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
}
private void HookManager_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
}
private void HookManager_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
}
例如,当我按下a
键时,我得到以下结果:
int value = e.KeyValue; // 65
Keys key = e.KeyCode; // A
所以我想知道如何捕获特定的keyboard combination
而不是例如key
的一个Ctrl + l
吗?
答案 0 :(得分:4)
您可以将此类代码用于KeyDown:
if(e.KeyCode == Keys.F1 && (e.Alt || e.Control || e.Shift))
{
}
基于MSDN的Get Status Bar Panel Instance文档:
每个KeyDown或KeyUp事件都传递一个KeyEventArgs,该参数指定用户按下的键以及是否同时按下了任何修饰键(CTRL,ALT和SHIFT)。
当用户按下任意键时,将发生KeyDown事件。按键 用户释放密钥时发生事件。重复的KeyDown事件 如果按住该键,则每次重复该键时都会发生,但是只有一个 用户释放键时会生成KeyUp事件。
按下按键时,也会发生KeyPress事件。一种 KeyPressEventArgs与每个KeyPress事件一起传递,并指定 每次按键后组成的字符。
答案 1 :(得分:1)
覆盖ProcessDialogKey()方法是通用的解决方案:
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == (Keys.Control | Keys.I))
{
MessageBox.Show("Ctrl+I");
return true;
}
return base.ProcessDialogKey(keyData);
}