c# - ¿Cómo puedo encontrar el estado de NumLock, CapsLock y ScrollLock en.net?
(4)
Importe la función WinAPI GetKeyState
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
public static extern short GetKeyState(int keyCode);
y luego puedes usarlo así
bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0;
bool NumLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0;
bool ScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0;
EDITAR: lo anterior es para el marco 1.1, para el marco 2.0 + puede usar
¿Cómo puedo encontrar el estado de las teclas NumLock, CapsLock y ScrollLock en .net?
Con Framework 2.0 y superior puede usar 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 encuentra este hilo mientras desarrolla en WPF, puede usar el método Keyboard.IsToggled 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);
Deberá agregar la siguiente directiva using
a la parte superior de su clase, si aún no está allí:
using System.Windows.Input;
Internamente, el método IsToggled () comprueba si el indicador KeyStates.Toggled
está o no configurado para la clave especificada.
[Flags]
public enum KeyStates : byte
{
None = (byte) 0,
Down = (byte) 1,
Toggled = (byte) 2,
}
Verificar estado
Para verificar el estado de las teclas CapsLock , NumLock y ScrollLock , puede usar el método Control.IsKeyLocked
:
var capsLockIsOn = Control.IsKeyLocked(Keys.CapsLock);
Mostrar activamente el estado
Dado que las teclas de bloqueo se pueden activar o desactivar cuando su aplicación no tiene control de enfoque, los eventos de teclado del formulario no son suficientes para detectar cambios en el estado de bloqueo de tecla y también debe poner su lógica en otros lugares como el evento de activación de su formulario o necesita registrar un gancho de teclado global.
Como una solución simple y confiable, puede verificar su estado en el evento Application.Idle
. Debe separar el controlador de eventos inactivo cuando cierre su formulario.
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);
}