Come posso trovare lo stato di Bloc Num, Bloc Maiusc e Bloc ScrollLock in .net?

StackOverflow https://stackoverflow.com/questions/577411

  •  05-09-2019
  •  | 
  •  

Domanda

Come faccio a trovare lo stato di NumLock, chiavi CAPSLOCK e ScrollLock in .net?

È stato utile?

Soluzione

Importa la funzione WinAPI GetKeyState

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

e quindi è possibile utilizzarlo come quella

bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0;
bool NumLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0;
bool ScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0;

EDIT: quanto sopra è per il Framework 1.1, per framework 2.0 + è possibile utilizzare

Control.IsKeyLocked

Altri suggerimenti

Con Framework 2.0 e superiori è possibile utilizzare una funzione di quadro

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

Se qualcuno si imbatte in questa discussione, mentre in via di sviluppo in WPF, è possibile utilizzare il metodo Keyboard.IsToggled che è stato introdotto in .NET 3.0:

var isNumLockToggled = Keyboard.IsKeyToggled(Key.NumLock);
var isCapsLockToggled = Keyboard.IsKeyToggled(Key.CapsLock);
var isScrollLockToggled = Keyboard.IsKeyToggled(Key.Scroll);

Si dovrà aggiungere la seguente direttiva using alla parte superiore della classe, se non è già presente:

using System.Windows.Input;

isToggled () controlla metodo per vedere se la bandiera KeyStates.Toggled è fissato per la chiave specificata.

[Flags]
public enum KeyStates : byte
{
    None = (byte) 0,
    Down = (byte) 1,
    Toggled = (byte) 2,
}

Verifica Stato

Per controllare lo stato di CapsLock , Bloc Num e ScrollLock tasti utilizzabili Control.IsKeyLocked metodo:

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

attivamente mostrare lo stato

Dal momento che le chiavi di blocco può essere accendere o spegnere quando l'applicazione non è attiva la gestione degli eventi di tastiera del modulo non è sufficiente a rilevare i cambiamenti sullo stato di blocco dei tasti e si dovrebbe anche mettere la vostra logica in alcuni altri luoghi come evento di attivazione del modulo o avete bisogno di registrare un hook di tastiera globale.

Come soluzione semplice e affidabile è possibile controllare il suo stato in Application.Idle evento. È necessario scollegare il gestore di eventi in standby Quando il modulo di chiusura.

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top