c# - 在控制台中检测Ctrl + S

我正在开发一个控制台应用程序,其中需要检测几个热键,例如Ctrl + N,Ctrl + O和Ctrl + S。这是我用来识别这些热键的部分代码:

ConsoleKeyInfo input = Console.ReadKey(true);

if (input.Modifiers == ConsoleModifiers.Control)
{
    if (input.Key == ConsoleKey.N)
    {
        // ...
    }
    else if (input.Key == ConsoleKey.O)
    {
        // ...
    }
    else if (input.Key == ConsoleKey.S)
    {
        //...
    }
}


上面的代码适用于Ctrl + N和Ctrl + O。但是,我无法将其用于Ctrl + S。经过快速测试后,我发现按Ctrl + S甚至不执行任何操作(这意味着程序仍在等待用户键入内容)。

仅在Ctrl + S时发生此问题。对任何其他修饰符(例如Shift)和键(N,O等)使用一些简单的if语句即可正常工作。

为什么会这样? Ctrl + S组合有特殊含义吗?有可能使这项工作吗?如果是,怎么办?

最佳答案

protected override  bool  ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (msg.Msg == 256)
    {
        //if the user pressed control + s
        if (keyData == (Keys.Control | Keys.S))
        {

        }
        //if the user pressed control + o 
        else if (keyData == (Keys.Control | Keys.O))
        {

        }
        //if the user pressed control + n 
        else if (keyData == (Keys.Control | Keys.N))
        {

        }
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

本文翻译自 https://stackoverflow.com/questions/39476157/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 c# input console modifiers


相关文章:

python - 如何在python中设置控制台的背景颜色?

javascript - 是否有热键来运行Firebug控制台的内容?

c++ - 控制台输出不断崩溃

c# - 子线程如何将其状态/进度通知给父线程?

c# - 需要围绕Microsoft.QualityTools.Testing.Fakes进行工作

c# - 有人知道下划线的拼写检查库吗?

c - 如何在C中制作BufferedReader

html - 如果输入框超过字符数限制,则显示跨度标签消息

c# - 成员“ LINQ to Entities不支持”

javascript - 按下键时获取值错误