.NET에서 Numlock, Capslock 및 Scrolllock의 상태를 어떻게 찾을 수 있습니까?
문제
.NET에서 Numlock, Capslock 및 Scrolllock 키의 상태를 어떻게 찾을 수 있습니까?
해결책
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;
편집 : 위는 프레임 워크 1.1 용입니다. 프레임 워크 2.0 + 용은 사용할 수 있습니다.
다른 팁
프레임 워크 2.0 이상을 사용하면 프레임 워크 기능을 사용할 수 있습니다.
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에서 개발하는 동안 누군가이 스레드를 만나면 keyboard.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,
}
상태를 확인하십시오
상태를 확인합니다 캡슐, Num 잠금 그리고 스크롤 잠금 당신이 사용할 수있는 키Control.IsKeyLocked
방법:
var capsLockIsOn = Control.IsKeyLocked(Keys.CapsLock);
상태를 적극적으로 보여줍니다
애플리케이션이 포커스 처리 키보드 이벤트가 없을 때 잠금 키가 켜지거나 꺼질 수 있으므로 양식의 키보드 이벤트는 키 잠금 상태의 변경 사항을 감지하기에 충분하지 않으며 활성화 이벤트와 같은 다른 장소에 논리를 넣어야합니다. 양식의 또는 전역 키보드 후크를 등록해야합니다.
간단하고 신뢰할 수있는 솔루션으로 상태를 확인할 수 있습니다. Application.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);
}