¿Cómo puedo encontrar el estado de bloqueo numérico, CapsLoc ScrollLock en .net?

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

  •  05-09-2019
  •  | 
  •  

Pregunta

¿Cómo puedo encontrar el estado de bloqueo numérico, teclas CapsLoc ScrollLock en .net?

¿Fue útil?

Solución

Importar la función GetKeyState WinAPI

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

y luego se puede usar como esa

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

EDIT: lo anterior es de 1,1 marco, de marco 2.0 + Se puede utilizar

Control.IsKeyLocked

Otros consejos

Con Framework 2.0 y arriba se puede utilizar una función de marco

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 alguien viene a través de este hilo mientras se desarrolla en WPF, puede utilizar el Keyboard.IsToggled método que se introdujo en .NET 3.0:

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

Vas a tener que añadir la siguiente directiva using a la parte superior de su clase, si no está ya allí:

using System.Windows.Input;

Internamente, el IsToggled () método comprueba para ver si es o no la bandera KeyStates.Toggled se establece para la clave especificada.

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

Comprobar estado

Para comprobar el estado de CapsLock , Bloq Num y ScrollLock teclas que puede utilizar Control.IsKeyLocked método:

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

activamente mostrar el estado

Desde las teclas de bloqueo puede ser encender o apagar cuando su aplicación no tienen problemas de enfoque eventos de teclado de la forma no es suficiente para detectar cambios en el estado de bloqueo de teclas y también se debe poner su lógica en algunos otros lugares como evento de activación de su forma o que necesita para registrar un gancho de teclado global.

Como una solución simple y confiable que usted puede comprobar su estado caso Application.Idle . Debe separar el controlador de eventos de inactividad cuando su forma cerrada.

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top