Frage

Wie kann ich den Zustand der NumLock, CapsLock und ScrollLock Schlüssel in .net finden?

War es hilfreich?

Lösung

Importieren Sie die WinAPI Funktion GetKeyState

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

und dann können Sie es so, dass Sie mit

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

EDIT: die oben ist für Framework 1.1, Framework 2.0 + Sie verwenden können,

Control.IsKeyLocked

Andere Tipps

Mit Framework 2.0 und höher Sie eine Rahmenfunktion verwenden können,

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

Wenn jemand über diesen Thread kommt, während in WPF zu entwickeln, können Sie die Keyboard.IsToggled Methode, die .NET 3.0 eingeführt wurde:

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

Sie werden die folgenden using Direktive an die Spitze Ihrer Klasse hinzufügen müssen, wenn es nicht bereits vorhanden ist:

using System.Windows.Input;

Intern wird die isToggled () Methode überprüft, um zu sehen, ob die KeyStates.Toggled Flagge für gesetzt die angegebene Taste.

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

Überprüfen Staat

Zustand Zur Überprüfung von CapsLock , NumLock und ScrollLock Tasten, die Sie verwenden können, Control.IsKeyLocked Methode:

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

Aktiv zeigen den Zustand

Da die Sperrtasten können ein- oder ausschalten, wenn die Anwendung nicht den Fokus Umgang mit Tastatur hat Ereignisse des Formulars nicht genug ist, um Änderungen an dem Tastenverriegelungszustand zu erkennen und Sie sollen auch Ihre Logik in einigen anderen Orten setzen wie Aktivierungsereignis des Formulars oder benötigen Sie eine globale Tastatur-Hook zu registrieren.

Als eine einfache und zuverlässige Lösung können Sie ihren Status überprüfen in Application.Idle Ereignis. Sie müssen Ihre freien Ereignishandler ab, wenn das Formular geschlossen.

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top