キーボードのキーの状態を取得する (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を愛用