かにすることができますので、状態のNumLock,CapsLockとScrollLockます。います。
質問
かにすることができますので、状態の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のためである+あなたが使用することができます。
他のヒント
フレームワーク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, NumLock や ScrollLock キーを利用できる
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);
}