5 votes

Désactiver la bascule num-lock en C# ?

Je voudrais maintenir le num-lock activé tant que mon application est en cours d'exécution, de sorte que si l'utilisateur désactive le num-lock, il sera immédiatement réactivé. Quel est le moyen le plus simple d'y parvenir en C# ?

Pour clarifier, pendant que mon application est en cours d'exécution, je "possède" la machine de l'utilisateur, donc dans mon cas spécifique, l'utilisateur n'aura pas besoin de déverrouiller le num-lock (cela ne signifie pas que j'ai le focus à tout moment).

Gracias

1voto

Thomas Levesque Points 141081

Vous pouvez le faire avec quelques appels P/Invoke. Consultez cette page

1voto

Cecil Has a Name Points 3385

Activer Form.KeyPreview sur votre formulaire, ajoutez une référence à Microsoft.VisualBasic (ou vous pouvez utiliser directement l'API native pour interroger l'état de la clé de verrouillage numérique).

public static class NativeMethods
{
    public const byte VK_NUMLOCK = 0x90;
    public const uint KEYEVENTF_EXTENDEDKEY = 1;
    public const int KEYEVENTF_KEYUP = 0x2;

    [DllImport("user32.dll")]
    public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

    public static void SimulateKeyPress(byte keyCode)
    {
        keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY, 0);
        keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
    }
}

public partial class Form1 : Form
{
    private bool protectKeys; // To protect from inifite keypress chain reactions

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (protectKeys)
            return;

        if (e.KeyCode == Keys.NumLock && 
            !(new Microsoft.VisualBasic.Devices.Keyboard().NumLock))
        {
            protectKeys = true;
            NativeMethods.SimulateKeyPress(NativeMethods.VK_NUMLOCK);
            protectKeys = false;
        }
    }
}

0voto

Reed Copsey Points 315315

Pour ce faire, vous devez ajouter un crochet de clavier de bas niveau. Stephen Toub a écrit un tutoriel sur son blog sur la mise en place de ce système.

Votre hook de clavier peut vérifier le statut de VK_NUMLOCK. Pour un Exemple VB voir ici .

0voto

AVD Points 57984

Vous trouverez peut-être des informations utiles sur ce lien. http://www.codeproject.com/KB/statusbar/update_toggle_key_status.aspx

0voto

RRUZ Points 98685

Voir ce lien

http://stackoverflow.com/questions/938144/detect-if-numlock-is-off-and-turn-it-always-back-on

Le code est en vb.net mais peut être facilement traduit en c#.

Au revoir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X