DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

Caps Lock、Num Lock、Insert、Scroll Lock、Kana Lockキーの状態を取得する

Caps Lock、Num Lock、Insert、Scroll Lock、Kana Lockキーがオンになっているか調べる方法を紹介します。

Control.IsKeyLockedメソッドを使用する方法

.NET Framework 2.0からは、Control.IsKeyLockedメソッドにより、Caps Lock、Num Lock、Insert、Scroll Lockキーがロックされているか否かを調べることができます。Kana Lockキーは調べることができません。

VB.NET
コードを隠すコードを選択
If Control.IsKeyLocked(Keys.CapsLock) Then
    Console.WriteLine("CapsLockがオンです")
End If
If Control.IsKeyLocked(Keys.Insert) Then
    Console.WriteLine("Insertがオンです")
End If
If Control.IsKeyLocked(Keys.NumLock) Then
    Console.WriteLine("NumLockがオンです")
End If
If Control.IsKeyLocked(Keys.Scroll) Then
    Console.WriteLine("ScrollLockがオンです")
End If
C#
コードを隠すコードを選択
if (Control.IsKeyLocked(Keys.CapsLock))
    Console.WriteLine("CapsLockがオンです");
if (Control.IsKeyLocked(Keys.Insert))
    Console.WriteLine("Insertがオンです");
if (Control.IsKeyLocked(Keys.NumLock))
    Console.WriteLine("NumLockがオンです");
if (Control.IsKeyLocked(Keys.Scroll))
    Console.WriteLine("ScrollLockがオンです");

なおVB.NETでは、My.Computer.KeyboardのCapsLock、NumLock、ScrollLockプロパティでも取得できます。

Win32 APIのGetKeyState関数を使用する方法

.NET Framework 1.1以前では、Win32 APIのGetKeyState関数を使う必要があります。GetKeyState関数では、Caps Lock、Num Lock、Insert、Scroll Lock、Kana Lockキーの状態を取得できます。

以下に、GetKeyState関数を使ってキーがロックされているか調べるメソッドの例を示します。

VB.NET
コードを隠すコードを選択
<System.Runtime.InteropServices.DllImport("user32.dll")> _
Private Shared Function GetKeyState(nVirtKey As Integer) As Integer
End Function

''' <summary>
''' トグルキーの状態がオンであるかを調べます。
''' </summary>
''' <param name="keyVal">調べるキー。</param>
''' <returns>キーの状態がオンであれば、True。</returns>
Public Shared Function IsKeyLocked(keyVal As System.Windows.Forms.Keys) _
        As Boolean
    Return (GetKeyState(CInt(keyVal)) And 1) = 1
End Function
C#
コードを隠すコードを選択
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetKeyState(int nVirtKey);

/// <summary>
/// トグルキーの状態がオンであるかを調べます。
/// </summary>
/// <param name="keyVal">調べるキー。</param>
/// <returns>キーの状態がオンであれば、True。</returns>
public static bool IsKeyLocked(System.Windows.Forms.Keys keyVal)
{
    return (GetKeyState((int)keyVal) & 1) == 1;
}

このメソッドの使い方は、例えば以下のようになります。

VB.NET
コードを隠すコードを選択
If IsKeyLocked(Keys.CapsLock) Then
    Console.WriteLine("CapsLockがオンです")
End If
If IsKeyLocked(Keys.Insert) Then
    Console.WriteLine("Insertがオンです")
End If
If IsKeyLocked(Keys.NumLock) Then
    Console.WriteLine("NumLockがオンです")
End If
If IsKeyLocked(Keys.Scroll) Then
    Console.WriteLine("ScrollLockがオンです")
End If
If IsKeyLocked(Keys.KanaMode) Then
    Console.WriteLine("KanaLockがオンです")
End If
C#
コードを隠すコードを選択
if (IsKeyLocked(Keys.CapsLock))
    Console.WriteLine("CapsLockがオンです");
if (IsKeyLocked(Keys.Insert))
    Console.WriteLine("Insertがオンです");
if (IsKeyLocked(Keys.NumLock))
    Console.WriteLine("NumLockがオンです");
if (IsKeyLocked(Keys.Scroll))
    Console.WriteLine("ScrollLockがオンです");
if(IsKeyLocked(Keys.KanaMode))
    Console.WriteLine("KanaLockがオンです");
  • 履歴:
  • 2013/6/11 GetKeyState関数を使う方法にコードを追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。