.NET에서 Numlock, Capslock 및 Scrolllock의 상태를 어떻게 찾을 수 있습니까?

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

  •  05-09-2019
  •  | 
  •  

문제

.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 + 용은 사용할 수 있습니다.

Control.IsKeyLocked

다른 팁

프레임 워크 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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top