.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
ハッシュテーブル(連想配列)を使うには?(Dictionaryクラス編)[2.0のみ、C#、VB]
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間