ヘッダー
Visual Basic サンプル集
VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

CapsLock を判定する

2023/11/11

→ C# のサンプルに切り替える → Python のサンプルに切り替える

 

CapsLock を判定する

VB2019対応 Visual Studio 2022

If OperatingSystem.IsWindows() AndAlso Console.CapsLock Then
    Debug.WriteLine("CapsLockされています。")
Else
    Debug.WriteLine("CapsLockされていません。")
End If

Debug.WriteLineが表示される場所

メモ:この例はWindowsでのみ動作します。Windowsかの確認(OperatingSystem.IsWindows()) を省いてもWindowsでは実行できますが、Linuxなどで実行すると System.PlatformNotSupportedException の例外が発生します。

 

Windowsフォームアプリの場合、これでもできます。

VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

If Control.IsKeyLocked(Keys.CapsLock) Then
    MessageBox.Show("CapsLockされています。")
Else
    MessageBox.Show("CapsLockされていません。")
End If

 

Windowsフォームアプリの場合、さらにこれでもできます。

VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

If My.Computer.Keyboard.CapsLock Then
    MessageBox.Show("CapsLockされています。")
Else
    MessageBox.Show("CapsLockされていません。")
End If

 

WPFの場合、これでもできます。

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

If Keyboard.IsKeyToggled(Key.CapsLock) Then
    MessageBox.Show("CapsLockされています。")
Else
    MessageBox.Show("CapsLockされていません。")
End If

 

 

参考:Windows APIで CapsLock を判定する

まず、次のように KeyboardUtilクラスを記述します。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Public Class KeyboardUtil
    <System.Runtime.InteropServices.DllImport("User32.dll")>
    Private Shared Function GetKeyState(keyCode As Integer) As Short
        'この中には何も記述しません。
    End Function


    '''<summary>
    '''キーボードのCapsLockがロック状態を取得します。ロックされている場合 True を返します。
    '''</summary>
    Public Shared Function IsCapsLock() As Boolean
        '20はNumLockキーを表します。
        If (GetKeyState(20) And 1) <> 0 Then
            Return True 'CapsLockされています。
        Else
            Return False 'CapsLockされていません。
        End If
    End Function
End Class

そして、呼び出したい個所で次のように呼び出します。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

If KeyboardUtil.IsCapsLock() Then
    Debug.WriteLine("CapsLockされています。")
Else
    Debug.WriteLine("CapsLockされていません。")
End If

Debug.WriteLineが表示される場所

メモ:この例はWindowsでのみ動作します。Linuxなどで実行すると System.DllNotFoundException の例外が発生します。

 

 

参考:ロックキーの状態を取得する方法の比較

方法 Consoleクラス Controlクラス
(Windows
フォーム)
My.Computer
.Keyboardクラス
Keyboardクラス
(WPF)
WindowsAPIの
GetKeyState
  使用例 使用例 使用例 使用例 使用例
判定できるキー
NumLock
CapsLock
ScrollLock ×
Insert × ×
使用できるアプリケーションの種類
コンソール × × ×
Windowsフォーム ×
WPF × ×
クラスライブラリ × × ×
使用できるOS
Windows
Windows以外 × × × × ×

どのような場合でも推奨できる手段の決め手がない状況です。やりたいことによって手段を決定しましょう。

ヒント

  • Windowsフォームに限定するなら、My.Computer.KeyboardクラスはAlt・Shift・Ctrlの判定やキーストロークの送信機能も含んでいるうえ、簡単に使用できるのでとても便利です。
  • コンソールやクラスライブラリでも、WindowsフォームやWPFを使用できるようにフレームワークを構成すればControlクラスやKeyboardクラスを呼び出せます。→ その方法の例
  • WindowsAPIのGetKeyStateは最も汎用性が高い方法ですが、記述量が多いので手軽さがありません。自作のクラスを作って機能を簡単に呼び出せるようにしておけば便利に使用できます。
  • Windows以外のOSでキーを判定する方法は不明です。