2016-09-13 4 views
1

Я разрабатываю консольное приложение, в котором мне нужно обнаружить несколько горячих клавиш, таких как Ctrl + N, Ctrl +O и Ctrl + S. Вот часть кода, который я использую, чтобы признать эти горячие клавиши:Detect 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 даже не делает ничего (что означает, что программа все еще ждет ввода пользователем чего-либо).

Эта проблема возникает только с . Комбинированный номер + S. Использование некоторых простых инструкций if для любого другого модификатора (Shift например) и ключа (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

Пожалуйста, добавьте некоторое объяснение –

Смежные вопросы