Как я могу найти состояние NumLock, CapsLock и ScrollLock in.net?
Как я могу найти состояние ключей NumLock, CapsLock и ScrollLock в .net ?
4 ответов
импорт функции WinAPI GetKeyState
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
public static extern short GetKeyState(int keyCode);
и тогда вы можете использовать его так
bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0;
bool NumLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0;
bool ScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0;
EDIT: выше для framework 1.1, для framework 2.0 + вы можете использовать
С Framework 2.0 и выше вы можете использовать функцию framework
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);
}
если кто-то сталкивается с этим потоком при разработке в WPF, вы можете использовать клавиатура.IsToggled метод, который был представлен в .NET 3.0:
var isNumLockToggled = Keyboard.IsKeyToggled(Key.NumLock);
var isCapsLockToggled = Keyboard.IsKeyToggled(Key.CapsLock);
var isScrollLockToggled = Keyboard.IsKeyToggled(Key.Scroll);
вы должны добавить следующее using
директива в верхней части вашего класса, если она еще не существует:
using System.Windows.Input;
внутри IsToggled() метод проверяет, является ли KeyStates.Toggled
флаг установлен для указанного ключа.
[Flags]
public enum KeyStates : byte
{
None = (byte) 0,
Down = (byte) 1,
Toggled = (byte) 2,
}
Проверить Состояние
чтобы проверить состояние CapsLock, NumLock и ScrollLock ключи вы можете использовать
Control.IsKeyLocked
способ:
var capsLockIsOn = Control.IsKeyLocked(Keys.CapsLock);
Активно Показывать Состояние
поскольку клавиши блокировки могут быть включены или выключены, когда ваше приложение не имеет фокуса, обработка событий клавиатуры формы недостаточно для обнаружения изменений в состоянии блокировки ключа, и вы также должны поместить ваша логика в некоторых других местах, таких как событие активации вашей формы или вам нужно зарегистрировать глобальный крюк клавиатуры.
в качестве простого и надежного решения вы можете проверить их статус в Application.Idle
событие. При закрытии формы необходимо отсоединить обработчик событий idle.
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);
}