Wie kann ich den Status der NumLock-, CapsLock- und ScrollLock-Tasten in .NET ermitteln?
Antworten
Zu viele Anzeigen?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:
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);
}
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,
}
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);
}