かにすることができますので、状態のNumLock,CapsLockとScrollLockます。います。

StackOverflow https://stackoverflow.com/questions/577411

  •  05-09-2019
  •  | 
  •  

質問

かにすることができますので、状態のNumLock,CapsLockとScrollLockキーです。います。

役に立ちましたか?

解決

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;

編集:上記のフレームワーク2.0のために、フレームワーク1.1のためである+あなたが使用することができます。

Control.IsKeyLocked

他のヒント

フレームワーク2.0で、あなたは、フレームワークの機能を使用することができます上記の

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.iskeylocked%28v=vs.80%29.aspxする

    public static bool NumlockActive()
    {
        return Control.IsKeyLocked(Keys.NumLock);
    }

だがこのスレッドを開発コンポーネントのラインナップの使用が可能で キーボード。IsToggled 法を導入しました。純3.0:

var isNumLockToggled = Keyboard.IsKeyToggled(Key.NumLock);
var isCapsLockToggled = Keyboard.IsKeyToggled(Key.CapsLock);
var isScrollLockToggled = Keyboard.IsKeyToggled(Key.Scroll);

いて以下のように追加 using ディレクティブのトップクラスの場合ではないでもコメントありがとうございます

using System.Windows.Input;

内部的には、 IsToggled() 法るかどうかを確認するか否か KeyStates.Toggled フラグがセットに指定された鍵があります。

[Flags]
public enum KeyStates : byte
{
    None = (byte) 0,
    Down = (byte) 1,
    Toggled = (byte) 2,
}

チェック状態

チェック状態 CapsLock, NumLockScrollLock キーを利用できる Control.IsKeyLocked 方法:

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

積極的に開催

以降、ロックキーでonまたはoffにして申請さんにフォーカスが当たって取り扱いキーボードイベントの形式ではな変化検出のキーロック状態にしてくだものをお入れロジックのような場所で活性化イベントのフォームまたは登録が必要ですグローバルキーボードのフック。

としてシンプルで信頼性の高いソリューションで確認できますその状況に Application.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);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top