Время от времени появляется запрос на перехват ключей из консольной программы.Стандартные события , такие как 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;
}
}
Затем все остальное станет тривиальным:
- Измените вашу программу назапустите вышеуказанную программу и затем запустите ее нормально
- Попробуйте ввести клавишу паузы
- Она будет перехвачена другой программой
- Ваша программа НЕ будет приостановлена.
Я сам попробовал вышеописанное, и оно работает.
PS: Я не имею в виду, что прямого выхода из консольной программы не существует.Вполне возможно, что я просто не нашел его, и вышеупомянутая глобальная библиотека ключей не работала из консольного приложения.