2009-02-23 19 views

答えて

42

インポート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; 

EDITようにそれを使用することができます:上記のフレームワーク2.0 +のためにあなたが

を使用することができ、フレームワーク1.1のためであります

Control.IsKeyLocked

+1

ここで間違っている可能性がありますが、これはWindows版の場合のみ厳密には動作しませんか?最初のオプションは直接.dllにフックし、2番目のオプションはSystem.Windows.Formsを必要とします。 –

+0

WinFormsを使用していない場合(例としてコンソール)、 '(bool)Console.CapsLock'を使用できます。 –

32

フレームワーク2.0以上を使用するとあなたがよ

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

:WPFで開発しながら、誰もがこのスレッドに遭遇した場合、フレームワークの機能

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); 
    } 
10

は、あなたは、.NET 3.0の中に導入されたKeyboard.IsToggledメソッドを使用することができますあなたのクラスの先頭に以下のusingディレクティブを追加してください:

using System.Windows.Input; 

内部的には、IsToggled()メソッドは、指定されたキーにKeyStates.Toggledフラグが設定されているかどうかを確認します。

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

チェック状態

あなたが使用することができますCapsLockキーNumLockキースクロールロックキー Control.IsKeyLocked方法の状態を確認するには:積極的に駅を表示

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

をte

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

シンプルで信頼できる解決策として、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); 
} 
+0

アプリケーションが実行されていない場合はどうなりますか?たとえば、ログインウィンドウを開いて、キャップがオンになっていることをユーザーに警告したい場合。 –

+1

@LeandroTuponeログインウィンドウが表示されているときは、アプリケーションが実行中であることを意味します。必要なときにキーの状態を確認するには、最初のオプションを使用します。また、積極的に状態を認識するために、2番目のオプションを使用できます。 –

関連する問題