39

.NET で NumLock、CapsLock、および ScrollLock キーの状態を確認するにはどうすればよいですか?

4

4 に答える 4

55

WinAPI 関数GetKeyStateをインポートします。

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
public static extern short GetKeyState(int keyCode);

そして、次のように使用できます。

bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0;
bool NumLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0;
bool ScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0;

フレームワーク1.1用です。フレームワーク 2.0 (およびそれ以降) では、以下を使用できます。

Control.IsKeyLocked

于 2009-02-23T12:02:51.323 に答える
42

Framework 2.0 以降では、フレームワーク関数を使用できます。

Control.IsKeyLocked(Keys) メソッド

public static bool NumlockActive()
{
    return Control.IsKeyLocked(Keys.NumLock);
}
于 2011-05-26T07:37:42.213 に答える
8

状態の確認

CapsLockNumLockおよびキーの状態を確認するには、メソッドScrollLockを使用できます 。Control.IsKeyLocked

var capsLockIsOn = Control.IsKeyLocked(Keys.CapsLock);

ステータスバーの UI に状態を積極的に表示

アプリケーションがフォーカスを持っていないときにロック キーをオンまたはオフにすることができるため、フォームのキーボード イベントを処理するだけでは、キー ロック状態の変化を検出するには不十分であり、アクティブ化イベントなどの他の場所にもロジックを配置する必要があります。または、グローバル キーボード フックを登録する必要があります。

Application.Idleシンプルで信頼性の高いソリューションとして、イベントでのステータスを確認できます。フォームが閉じられたら、idle イベント ハンドラーをデタッチする必要があります。

public Form1()
{
    InitializeComponent();
    Application.Idle += Application_Idle;
}

void Application_Idle(object sender, EventArgs e)
{
    if (Control.IsKeyLocked(Keys.CapsLock))
        toolStripStatusLabel1.Text = "CapsLock is On";
    else
        toolStripStatusLabel1.Text = "";
}

protected override void OnFormClosed(FormClosedEventArgs e)
{
    Application.Idle -= Application_Idle;
    base.OnFormClosed(e);
}
于 2016-04-08T10:16:31.347 に答える