C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C#で常にキーボード入力を受け取る

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■86997 / inTopicNo.1)  C#で常にキーボード入力を受け取る
  
□投稿者/ ああ (1回)-(2018/04/06(Fri) 21:10:54)

分類:[C#] 

キーボードの入力を常に受け取る方法を教えてください。
お願いします。m(_ _)m
引用返信 編集キー/
■86998 / inTopicNo.2)  Re[1]: C#で常にキーボード入力を受け取る
□投稿者/ 魔界の仮面弁士 (1614回)-(2018/04/06(Fri) 21:15:59)
No86997 (ああ さん) に返信
> キーボードの入力を常に受け取る方法を教えてください。
> お願いします。m(_ _)m

コンソールアプリ…ではないですよね。

Windows アプリで、自アプリにフォーカスが無い時にでもキー入力を捉えたいのであれば、
DirectInput を使ってみてはいかがでしょうか。
引用返信 編集キー/
■86999 / inTopicNo.3)  Re[2]: C#で常にキーボード入力を受け取る
□投稿者/ ああ (2回)-(2018/04/06(Fri) 21:20:31)
No86998 (魔界の仮面弁士 さん) に返信
> ■No86997 (ああ さん) に返信
>>キーボードの入力を常に受け取る方法を教えてください。
>>お願いします。m(_ _)m
>
> コンソールアプリ…ではないですよね。
>
> Windows アプリで、自アプリにフォーカスが無い時にでもキー入力を捉えたいのであれば、
> DirectInput を使ってみてはいかがでしょうか。

一応、コンソールの場合では、どのような方法がありますか?

引用返信 編集キー/
■87003 / inTopicNo.4)  Re[3]: C#で常にキーボード入力を受け取る
□投稿者/ 魔界の仮面弁士 (1616回)-(2018/04/06(Fri) 23:22:54)
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;
  }
}
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ