¿Cómo puedo encontrar el estado de bloqueo numérico, CapsLoc ScrollLock en .net?
Pregunta
¿Cómo puedo encontrar el estado de bloqueo numérico, teclas CapsLoc ScrollLock en .net?
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
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);
}