.NET TIPS

NumLock、CapsLock、ScrollLock、InsertキーのON/OFFを判定するには?[2.0のみ、C#、VB]

デジタルアドバンテージ 一色 政彦
2006/03/31

 .NET Framework 1.xでは、[NumLock][CapsLock][ScrollLock][Insert]などのキーのロック状態(ON:有効/OFF:無効)を判定するには、Win32 APIのGetKeyState関数を呼び出す必要があった。つまり、これらのキーの判定は.NET Frameworkのクラス・ライブラリだけで気軽に実装できなかったのだ。

 しかし.NET Framework 2.0ではこれらのキーを判定するためのメソッドが新たに追加されており、非常に簡単にこれらのキーの判定処理を実装できるようになっている。具体的には次のメソッドだ。

  • Controlクラス(System.Windows.Forms名前空間)の静的なIsKeyLockedメソッド

 このメソッドは、そのパラメータにKeys列挙体(System.Windows.Forms名前空間)の「NumLock」「CapsLock(もしくはCapital)」「Scroll」「Insert」のいずれかの値を指定して呼び出すと、Boolean型の戻り値を返す(当然ながらその意味はTrueがONで、FalseがOFFを表す)。なお、前出以外のKeys列挙体の値を指定した場合は、NotSupportedException例外が発生する。

 次のサンプル・プログラムは、このControl.IsKeyLockedメソッドを実際に利用した例である。このプログラムは、アイドル時間に、各キーのON/OFF状態を調べて、対応するLabelコントロールのテキストを更新する。なおソース・コード全体は以下の説明欄にあるリンクからダウンロードできる。

public Form1()
{
  InitializeComponent();

  // アプリケーションのアイドル時に呼び出される
  // イベント・ハンドラを登録する
  Application.Idle += new EventHandler(Application_Idle);
}

// アプリケーションがアイドル時にテキストを更新する
private void Application_Idle(object sender, EventArgs e)
{
  // [NumLock]キーの状態を確認する
  if (Control.IsKeyLocked(Keys.NumLock))
    labelNumLock.Text = "ON";
  else
    labelNumLock.Text = "OFF";

  // [CapsLock]キーの状態を確認する
  // ※Keys.Capitalを使用してもよい
  if (Control.IsKeyLocked(Keys.CapsLock))
    labelCapsLock.Text = "ON";
  else
    labelCapsLock.Text = "OFF";

  // [ScrollLock]キーの状態を確認する
  if (Control.IsKeyLocked(Keys.Scroll))
    labelScrollLock.Text = "ON";
  else
    labelScrollLock.Text = "OFF";


  // [Insert]キーの状態を確認する
  if (Control.IsKeyLocked(Keys.Insert))
    labelInsert.Text = "ON";
  else
    labelInsert.Text = "OFF";
}
Sub New()
  InitializeComponent()

  ' アプリケーションのアイドル時に呼び出される
  ' イベント・ハンドラを登録する
  AddHandler Application.Idle, AddressOf Application_Idle
End Sub

' アプリケーションがアイドル時にテキストを更新する
Private Sub Application_Idle(ByVal sender As Object, ByVal e As EventArgs)
  ' [NumLock]キーの状態を確認する
  If Control.IsKeyLocked(Keys.NumLock) Then
    labelNumLock.Text = "ON"
  Else
    labelNumLock.Text = "OFF"
  End If

  ' [CapsLock]キーの状態を確認する
  ' ※Keys.Capitalを使用してもよい
  If Control.IsKeyLocked(Keys.CapsLock) Then
    labelCapsLock.Text = "ON"
  Else
    labelCapsLock.Text = "OFF"
  End If

  ' [ScrollLock]キーの状態を確認する
  If Control.IsKeyLocked(Keys.Scroll) Then
    labelScrollLock.Text = "ON"
  Else
    labelScrollLock.Text = "OFF"
  End If

  ' [Insert]キーの状態を確認する
  If Control.IsKeyLocked(Keys.Insert) Then
    labelInsert.Text = "ON"
  Else
    labelInsert.Text = "OFF"
  End If
End Sub
Control.IsKeyLockedメソッドを実際に利用したサンプル・プログラム(上:C#、下:VB)
ソース・コード全体のダウンロード(C#版:Form1.cs/VB版:Form1.vb

 このサンプル・プログラムを実行したのが次の画面である。

サンプル・プログラムの実行結果
[NumLock][CapsLock][ScrollLock][Insert]などのキーを押して、ロック状態を切り替えると、それに対応するLabelコントロールの表記が切り替わる。なおCapsLockの状態を切り替えるには、通常は[Shift]+[CapsLock]キーを押す必要がある。

 このサンプル・プログラムを実行している最中に[NumLock][CapsLock][ScrollLock][Insert]などのキーを押すと、それに対応するLabelコントロール上の「ON」「OFF」という表記が切り替わるのが確認できるだろう。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:キーボード
カテゴリ:コンソール・アプリケーション 処理対象:キーボード
使用ライブラリ:Controlクラス(System.Windows.Forms名前空間)
使用ライブラリ:Keys列挙体(System.Windows.Forms名前空間)
使用ライブラリ:NotSupportedExceptionクラス(System名前空間)

この記事と関連性の高い別の.NET TIPS
コントロールに対するキー入力をフォームで処理するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH