C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 >
ScrollLock を判定する
2024/4/13
→ Visual Basic のサンプルに切り替える → Python のサンプルに切り替える
目次
Windowsフォームアプリで ScrollLock を判定する
if (Control.IsKeyLocked(Keys.Scroll))
{
MessageBox.Show("ScrollLockされています。");
}
else
{
MessageBox.Show("ScrollLockされていません。");
}
WPF で ScrollLock を判定する
if (Keyboard.IsKeyToggled(Key.Scroll))
{
MessageBox.Show("ScrollLockされています。");
}
else
{
MessageBox.Show("ScrollLockされていません。");
}
汎用的に ScrollLock を判定する
まず、次のように KeyboardUtilクラスを記述します。
public class KeyboardUtil
{
[System.Runtime.InteropServices.DllImport("User32.dll")]
private static extern short GetKeyState(int keyCode);
///<summary>
///キーボードのScrollLockがロック状態を取得します。ロックされている場合 true を返します。
///</summary>
public static bool IsScrollLock()
{
//145はScrollLockキーを表します。
if ((GetKeyState(145) & 0x8001) != 0)
{
return true; //ScrollLockされています。
}
else
{
return false; //ScrollLockされていません。
}
}
}
そして、呼び出したい個所で次のように呼び出します。
if (KeyboardUtil.IsScrollLock())
{
System.Diagnostics.Debug.WriteLine("ScrollLockされています。");
}
else
{
System.Diagnostics.Debug.WriteLine("ScrollLockされていません。");
}
メモ:この例はWindowsでのみ動作します。Linuxなどで実行すると System.DllNotFoundException の例外が発生します。
メモ:0x8001の根拠はSystem.Windows.Forms.Control.IsKeyLockedの実装。私は上位ビットの意味を理解していません。
参考:ロックキーの状態を取得する方法の比較
方法 | Consoleクラス | Controlクラス (Windowsフォーム) |
Keyboardクラス (WPF) |
WindowsAPIの GetKeyState |
---|---|---|---|---|
使用例 | 使用例 | 使用例 | 使用例 | |
判定できるキー | ||||
NumLock | ○ | ○ | ○ | ○ |
CapsLock | ○ | ○ | ○ | ○ |
ScrollLock | × | ○ | ○ | ○ |
Insert | × | ○ | ○ | ○ |
使用できるアプリケーションの種類 | ||||
コンソール | ○ | × | × | ○ |
Windowsフォーム | ○ | ○ | × | ○ |
WPF | ○ | × | ○ | ○ |
クラスライブラリ | ○ | × | × | ○ |
使用できるOS | ||||
Windows | ○ | ○ | ○ | ○ |
Windows以外 | × | × | × | × |
どのような場合でも推奨できる手段の決め手がない状況です。やりたいことによって手段を決定しましょう。
ヒント
- コンソールやクラスライブラリでも、WindowsフォームやWPFを使用できるようにフレームワークを構成すればControlクラスやKeyboardクラスを呼び出せます。→ その方法の例
- WindowsAPIのGetKeyStateは最も汎用性が高い方法ですが、記述量が多いので手軽さがありません。自作のクラスを作って機能を簡単に呼び出せるようにしておけば便利に使用できます。
- Windows以外のOSでキーを判定する方法は不明です。