| Visual Basic サンプル集 |
|
|
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
ScrollLock を判定する
2024/4/13
→ C# のサンプルに切り替える → Python のサンプルに切り替える
目次
Windowsフォームアプリで ScrollLock を判定する
![]()
If Control.IsKeyLocked(Keys.Scroll) Then
MessageBox.Show("ScrollLockされています。")
Else
MessageBox.Show("ScrollLockされていません。")
End If
これでもできます。
![]()
If My.Computer.Keyboard.ScrollLock Then
MessageBox.Show("ScrollLockされています。")
Else
MessageBox.Show("ScrollLockされていません。")
End If
WPF で ScrollLock を判定する
![]()
If Keyboard.IsKeyToggled(Key.ScrollLock) Then
MessageBox.Show("ScrollLockされています。")
Else
MessageBox.Show("ScrollLockされていません。")
End If
汎用的に ScrollLock を判定する
まず、次のように KeyboardUtilクラスを記述します。
![]()
Public Class KeyboardUtil
<System.Runtime.InteropServices.DllImport("User32.dll")>
Private Shared Function GetKeyState(keyCode As Integer) As Short
'この中には何も記述しません。
End Function
'''<summary>
'''キーボードのScrollLockがロック状態を取得します。ロックされている場合 True を返します。
'''</summary>
Public Shared Function IsScrollLock() As Boolean
'145はScrollLockキーを表します。
If (GetKeyState(145) And &H8001) <> 0 Then
Return True 'ScrollLockされています。
Else
Return False 'ScrollLockされていません。
End If
End Function
End Class
そして、呼び出したい個所で次のように呼び出します。
![]()
If KeyboardUtil.IsScrollLock() Then
Debug.WriteLine("ScrollLockされています。")
Else
Debug.WriteLine("ScrollLockされていません。")
End If
メモ:この例はWindowsでのみ動作します。Linuxなどで実行すると System.DllNotFoundException の例外が発生します。
メモ:&H8001の根拠はSystem.Windows.Forms.Control.IsKeyLockedの実装。私は上位ビットの意味を理解していません。
参考:ロックキーの状態を取得する方法の比較
| 方法 | 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でキーを判定する方法は不明です。