كيف يمكنني العثور على حالة numlock، capslock و scrolllock في .NET؟
سؤال
كيف يمكنني العثور على حالة Numlock، Capslock و Scrolllock مفاتيح .NET؟
المحلول
استيراد وظيفة 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;
تحرير: ما سبق هو Framework 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، يمكنك استخدام لوحة المفاتيح.يسوغيد الطريقة التي تم تقديمها في .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,
}
تحقق حالة
للتحقق من حالة Caps Lock, 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);
}