В консольном приложении C # клавиша Пауза останавливает вывод на дисплей. Могу ли я отключить это? - PullRequest
4 голосов
/ 31 марта 2012

В консольном приложении C # нажатие клавиши «Пауза» останавливает вывод на дисплей.Можно ли это отключить?

Я надеялся на такой обработчик, как событие Console.CancelKeyPress, которое обрабатывает ввод Ctrl + C.

1 Ответ

2 голосов
/ 31 марта 2012

Время от времени появляется запрос на перехват ключей из консольной программы.Стандартные события , такие как CTRL_C_EVENT и CTRL_CLOSE_EVENT, не включают в себя событие Pause.Я пытался сделать это, используя фоновый поток, но мне кажется, не удается.Однако есть не очень сложный обходной путь: используйте дополнительный процесс.

Загрузите этот простой в использовании глобальный хук клавиатуры для C # .Затем, когда вы откроете этот проект, возьмите следующий код и поместите его в Form1.cs:

public partial class Form1 : Form {

    globalKeyboardHook globalKeyboardHook = new globalKeyboardHook();

    public Form1() {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {
        globalKeyboardHook.HookedKeys.Add(Keys.Pause);
        globalKeyboardHook.KeyDown += new KeyEventHandler(globalKeyboardHook_KeyDown);
        globalKeyboardHook.KeyUp += new KeyEventHandler(globalKeyboardHook_KeyUp);
    }

    void globalKeyboardHook_KeyUp(object sender, KeyEventArgs e)
    {
        // remove this when you want to run invisible
        lstLog.Items.Add("Up\t" + e.KeyCode.ToString());

        // this prevents the key from bubbling up in other programs
        e.Handled = true;
    }

    void globalKeyboardHook_KeyDown(object sender, KeyEventArgs e)
    {
        // remove this when you want to run without visible window
        lstLog.Items.Add("Down\t" + e.KeyCode.ToString());

        // this prevents the key from bubbling up in other programs
        e.Handled = true;
    }
}

Затем все остальное станет тривиальным:

  1. Измените вашу программу назапустите вышеуказанную программу и затем запустите ее нормально
  2. Попробуйте ввести клавишу паузы
  3. Она будет перехвачена другой программой
  4. Ваша программа НЕ будет приостановлена.

Я сам попробовал вышеописанное, и оно работает.

PS: Я не имею в виду, что прямого выхода из консольной программы не существует.Вполне возможно, что я просто не нашел его, и вышеупомянутая глобальная библиотека ключей не работала из консольного приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...