2016-09-13 37 views
1

我正在开发中,我需要检测多个热键控制台应用程序如Ctrl键 + ÑCtrl键 + öCtrl键 + 小号。下面的代码的一部分,我用它来识别这些热键:检测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 +ñ按Ctrl +Ø。但是,我无法得到它的工作Ctrl + S。在做了一些快速测试后,我发现按Ctrl + S甚至没有做任何事情(意味着程序仍然在等待用户键入内容)。

此问题只发生在Ctrl + S。使用一些简单的if语句为任何其他修饰符(例如移位)和密钥(N,O等)工作正常。

为什么会发生这种情况? 是否有特殊含义Ctrl + S组合?是否有可能做到这一点?如果是,如何?

+2

CTRL-S被控制台程序捕获以暂停输出。这就是为什么它没有传递给你的应用程序。我不知道如何禁用它。 –

+0

我也发现这个:http://stackoverflow.com/a/9951471/2524589 – KSib

回答

0
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); 
} 
+0

请添加一些解释 –