如何在win形式的应用程序中检测两个热键,如CTRL + C,CTRL + W.

时间:2013-12-25 16:28:55

标签: c# winforms

我的问题是如何在win表单应用程序中检测两个热键 CTRL + C CTRL K 喜欢视觉工作室评论命令

我需要模拟VS热键用于评论一行代码

4 个答案:

答案 0 :(得分:1)

简单方法是......有一个名为ProcessCmdKey的Windows API函数,通过覆盖此函数,我们可以实现我们想要的目标

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
   if (keyData == (Keys.Control | Keys.C)) {
      MessageBox.Show("You have pressed the shortcut Ctrl+C");
      return true;
   }
   return base.ProcessCmdKey(ref msg, keyData);
}

可以找到Microsoft文档here

source

答案 1 :(得分:0)

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
   if (e.Modifiers == Keys.Control && e.KeyCode == Keys.C)
   {

   }
}

答案 2 :(得分:0)

如果你想处理 Ctrl + C 然后 Ctrl + K 你需要维持一个州变量

将表单KeyPreview属性设置为true并处理表单KeyDown事件。

试试这个:

   this.KeyPreview=true;
   private bool isFirstKeyPressed= false;
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.C)
        {               
            isFirstKeyPressed = true;                
        }


        if (isFirstKeyPressed)
        {
            if (e.Control && e.KeyCode == Keys.K)
            {
                MessageBox.Show("Ctrl+C and Ctrl+K pressed Sequentially");
                /*write your code here*/
                isFirstKeyPressed= false;
            }
        }
    }

答案 3 :(得分:0)

private bool _isFirstKeyPressedW = false;

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control & e.KeyCode == Keys.W) 
    {
        _isFirstKeyPressedW = true;
    }
    if (_isFirstKeyPressedW) 
    {
        if (e.Control & e.KeyCode == Keys.S) 
        {
            //write your code 
        } 
        else 
        {
            _isFirstKeyPressedW = e.KeyCode == Keys.W;
        }
    }
}