キーボードのキーの状態を取得する (System.Windows.Input.Keyboard を用いたキーの状態の取得) - C#

キーボードのキーの状態を取得する方法を紹介します。
System.Windows.Input.Keyboard を用いるとキーボードのキーの状態を取得できます。

プログラム例

UI

下図のUIを準備します。フォームにラベル2つを配置します。

参照

System.Windows.Input.Keybordを利用するためのアセンブリ "PresentationCore.dll"を追加します。.NET Framework 4.0ではC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Clientのディレクトリにあります。


System.Windows.Input.Keyを利用するためのアセンブリ"WindowsBase.dll"を追加します。.NET Framework 4.0ではC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Clientのディレクトリにあります。


アセンブリが追加されると[参照]ノードにアセンブリが表示されます。

コード

以下のコードを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows;
using System.Windows.Input;

namespace KeyState
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void FormMain_Load(object sender, EventArgs e)
    {
      Application.Idle += new EventHandler(Application_Idle);
    }

    private void Application_Idle(object sender, EventArgs e)
    {
      if (Keyboard.IsKeyDown(Key.Left) == true) {
        label1.Text = "左キーが押されています。";
      }
      else {
        label1.Text = "なし。";
      }

      if (Keyboard.IsKeyDown(Key.Right) == true) {
        label2.Text = "右キーが押されています。";
      }
      else {
        label2.Text = "なし。";
      }
    }
  }
}

解説

今回のアプリケーションではキーの検出はアプリケーションのIdleイベントで処理します。

下記コードでアプリケーションのIdleイベントにイベントハンドラを設定します。
private void FormMain_Load(object sender, EventArgs e)
{
  Application.Idle += new EventHandler(Application_Idle);
}

Idleイベントハンドラでは、Keyboard.IsKeyDown()メソッドを用いてキーの状態を取得します。今回は、カーソルの左右キーの状態を取得します。キーが押されている状態の場合は、その旨のメッセージをラベルに表示します。
if (Keyboard.IsKeyDown(Key.Left) == true) {
  label1.Text = "左キーが押されています。";
}
else {
  label1.Text = "なし。";
}
if (Keyboard.IsKeyDown(Key.Right) == true) {
  label2.Text = "右キーが押されています。";
}
else {
  label2.Text = "なし。";
}

実行結果

アプリケーションを実行します。下図の画面が表示されます。


キーボードの右カーソルキーを押すとlabel2に右キーが押された旨が表示されます。


キーボードの右カーソルキーを離すとすぐにラベルのメッセージが"なし"に変わります。キーボードの左カーソルキーを押すとlabel1にメッセージが表示されます。


両方のキーを押すと、両方のラベルにメッセージが表示されます。


キーの状態を取得できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2012-02-09
iPentec all rights reserverd.