How can I find the state of NumLock, CapsLock and ScrollLock in .net?

戏子无情 提交于 2019-12-17 05:04:22

问题


How can I find the state of NumLock, CapsLock and ScrollLock keys in .net ?


回答1:


Import the WinAPI function GetKeyState

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
public static extern short GetKeyState(int keyCode);

and then you can use it like that

bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0;
bool NumLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0;
bool ScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0;

EDIT: the above is for framework 1.1, for framework 2.0 + you can use

Control.IsKeyLocked




回答2:


With Framework 2.0 and above you can use an framework function

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);
    }



回答3:


Check State

To check state of CapsLock, NumLock and ScrollLock keys you can use Control.IsKeyLocked method:

var capsLockIsOn = Control.IsKeyLocked(Keys.CapsLock);

Actively Show The State in UI in status bar

Since the lock keys can be turn on or turn off when your application doesn't have focus handling keyboard events of the form is not enough to detect changes on the key lock state and you should also put your logic in some other places like activation event of your form or you need to register a global keyboard hook.

As a simple and reliable solution you can check their status in Application.Idle event. You must detach your idle event handler when your form closed.

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);
}


来源:https://stackoverflow.com/questions/577411/how-can-i-find-the-state-of-numlock-capslock-and-scrolllock-in-net

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!