Wie finde ich den Zustand der NumLock, CapsLock und ScrollLock in .net?
Frage
Wie kann ich den Zustand der NumLock, CapsLock und ScrollLock Schlüssel in .net finden?
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,
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);
}