如何在.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
使用Framework 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); }
检查状态
要检查的状态CapsLock,NumLock和ScrollLock键,你可以使用
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); }