| Visual Basic サンプル集 |
|
|
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
CapsLock を判定する
2023/11/11
→ C# のサンプルに切り替える → Python のサンプルに切り替える
CapsLock を判定する
![]()
If OperatingSystem.IsWindows() AndAlso Console.CapsLock Then
Debug.WriteLine("CapsLockされています。")
Else
Debug.WriteLine("CapsLockされていません。")
End If
メモ:この例はWindowsでのみ動作します。Windowsかの確認(OperatingSystem.IsWindows()) を省いてもWindowsでは実行できますが、Linuxなどで実行すると System.PlatformNotSupportedException の例外が発生します。
Windowsフォームアプリの場合、これでもできます。
![]()
If Control.IsKeyLocked(Keys.CapsLock) Then
MessageBox.Show("CapsLockされています。")
Else
MessageBox.Show("CapsLockされていません。")
End If
Windowsフォームアプリの場合、さらにこれでもできます。
![]()
If My.Computer.Keyboard.CapsLock Then
MessageBox.Show("CapsLockされています。")
Else
MessageBox.Show("CapsLockされていません。")
End If
WPFの場合、これでもできます。
![]()
If Keyboard.IsKeyToggled(Key.CapsLock) Then
MessageBox.Show("CapsLockされています。")
Else
MessageBox.Show("CapsLockされていません。")
End If
参考:Windows APIで CapsLock を判定する
まず、次のように KeyboardUtilクラスを記述します。
![]()
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
そして、呼び出したい個所で次のように呼び出します。
![]()
If KeyboardUtil.IsCapsLock() Then
Debug.WriteLine("CapsLockされています。")
Else
Debug.WriteLine("CapsLockされていません。")
End If
メモ:この例は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でキーを判定する方法は不明です。