|
2018/04/06(Fri) 23:26:40 編集(投稿者)
■No86999 (ああ さん) に返信 > 一応、コンソールの場合では、どのような方法がありますか?
using System; using System.Threading; using System.Windows.Forms; using SharpDX.DirectInput; static class Program { private static bool Running; private static AutoResetEvent KeyEvent; [STAThread] public static void Main() { // コンソールに対して Ctrl+C または Ctrl+Break が入力されたら終了 Console.CancelKeyPress += Console_CancelKeyPress;
Console.WriteLine("キー入力を監視します。他のアプリがアクティブな状態でも構いません。"); using (var wnd = new Form()) using (var directInput = new DirectInput()) using (var keyboard = new Keyboard(directInput)) { keyboard.SetCooperativeLevel(wnd.Handle, CooperativeLevel.Background | CooperativeLevel.NonExclusive); keyboard.SetNotification(KeyEvent = new AutoResetEvent(false)); keyboard.Properties.BufferSize = 256; Running = true; keyboard.Acquire(); while (Running) { if (KeyEvent.WaitOne(1000)) { foreach(var keyState in keyboard.GetBufferedData()) { Console.WriteLine(keyState.ToString()); } } } keyboard.Unacquire(); } Console.WriteLine("監視を終了しました。"); }
private static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e) { e.Cancel = true; Running = false; } }
|