44 Stimmen

Wie kann ich den Status von NumLock, CapsLock und ScrollLock in .NET ermitteln?

Wie kann ich den Status der NumLock-, CapsLock- und ScrollLock-Tasten in .NET ermitteln?

61voto

Pablo Retyk Punkte 5552

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 verwenden:

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

Es ist für Framework 1.1. Für Framework 2.0 (und später) können Sie verwenden:

Control.IsKeyLocked

45voto

Summer-Time Punkte 1794

Mit Framework 2.0 und höher können Sie eine Framework-Funktion verwenden:

_Control.IsKeyLocked(Keys) Methode_

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

22voto

Grant Winney Punkte 63150

Wenn jemand beim Entwickeln in WPF auf diesen Thread stößt, können Sie die Keyboard.IsToggled Methode, die in .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 müssen Folgendes hinzufügen using am Anfang Ihrer Klasse einfügen, falls sie dort noch nicht vorhanden ist:

using System.Windows.Input;

Intern ist die IsToggled() Methode prüft, ob die KeyStates.Toggled für den angegebenen Schlüssel gesetzt ist.

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

10voto

Reza Aghaei Punkte 110965

Staat prüfen

Zur Überprüfung des Status von CapsLock , NumLock y ScrollLock Tasten können Sie verwenden Control.IsKeyLocked Methode:

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

Aktive Anzeige des Status in der UI in der Statusleiste

Da die Sperrtasten ein- oder ausgeschaltet werden können, wenn Ihre Anwendung nicht im Fokus steht, reicht es nicht aus, Tastaturereignisse des Formulars zu behandeln, um Änderungen am Zustand der Tastensperre zu erkennen, und Sie sollten Ihre Logik auch an anderen Stellen wie dem Aktivierungsereignis Ihres Formulars einsetzen oder einen globalen Tastatur-Hook registrieren.

Als einfache und zuverlässige Lösung können Sie ihren Status in Application.Idle Veranstaltung. Sie müssen Ihren Idle-Event-Handler lösen, wenn Ihr Formular geschlossen wird.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X