Comment trouver l'état de Numlock, CapSlock et Touches ScrollLock dans .NET?
Importer la fonction Winapi Getkeystate
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
public static extern short GetKeyState(int keyCode);
et puis vous pouvez l'utiliser comme ça
bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0;
bool NumLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0;
bool ScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0;
Edit: Ce qui précède est pour le cadre 1.1, pour le cadre 2.0 +, vous pouvez utiliser
Avec cadre 2.0 et plus, vous pouvez utiliser une fonction-cadre
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);
}
Si quelqu'un entre sur ce fil tout en développant dans WPF, vous pouvez utiliser la méthode keyboard.istogled méthode introduite dans .NET 3.0:
var isNumLockToggled = Keyboard.IsKeyToggled(Key.NumLock);
var isCapsLockToggled = Keyboard.IsKeyToggled(Key.CapsLock);
var isScrollLockToggled = Keyboard.IsKeyToggled(Key.Scroll);
Vous devrez ajouter la directive suivante using
directive au sommet de votre classe, si ce n'est pas déjà là:
using System.Windows.Input;
Interne, la méthode istoggle () vérifie la méthode pour voir si le KeyStates.Toggled
Le drapeau est défini pour la clé spécifiée.
[Flags]
public enum KeyStates : byte
{
None = (byte) 0,
Down = (byte) 1,
Toggled = (byte) 2,
}
Vérifier l'état
Pour vérifier l'état de CapsLock, NumLock et ScrollLock clés que vous pouvez utiliser Control.IsKeyLocked
Méthode:
var capsLockIsOn = Control.IsKeyLocked(Keys.CapsLock);
montrer activement l'état
Étant donné que les touches de verrouillage peuvent être allumées ou désactivées lorsque votre application ne manipule pas la tâche des événements de clavier du formulaire ne suffit pas pour détecter les modifications de l'état de verrouillage de la clé et vous devez également mettre votre logique dans d'autres endroits tels que l'événement d'activation. de votre forme ou vous devez enregistrer un crochet de clavier global.
En tant que solution simple et fiable, vous pouvez vérifier leur statut dans Application.Idle
événement. Vous devez détacher votre gestionnaire d'événements de veille lorsque votre formulaire fermé.
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);
}