Question

Comment puis-je trouver l'état du verrouillage numérique, touches Verr et ScrollLock dans .net?

Était-ce utile?

La solution

Importer la fonction WinAPI GetKeyState

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

et 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: l'est ci-dessus pour cadre 1.1, pour framework 2.0 + vous pouvez utiliser

Control.IsKeyLocked

Autres conseils

Avec Framework 2.0 et au-dessus, vous pouvez utiliser une fonction de 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 vient sur ce fil tout en développant dans WPF, vous pouvez utiliser le Keyboard.IsToggled procédé qui a été introduit 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 using suivante en haut de votre classe, si ce n'est pas déjà là:

using System.Windows.Input;

isToggled () méthode vérifie pour voir si oui ou non le drapeau KeyStates.Toggled est définie 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 vous pouvez utiliser les touches Control.IsKeyLocked méthode:

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

L'État Activement Afficher

Depuis les touches de verrouillage peuvent être activer ou désactiver lorsque votre application ne pas les événements de clavier manipulation mise au point de la forme ne suffit pas pour détecter les changements sur l'état de verrouillage des touches et vous devez également mettre votre logique dans d'autres lieux comme événement d'activation de votre formulaire ou vous devez vous inscrire un crochet du clavier global.

En tant que solution simple et fiable, vous pouvez vérifier leur statut l'événement de Application.Idle. Vous devez détacher votre gestionnaire d'événements inactif lorsque votre forme fermée.

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