سؤال

انا اكتب (بعد آخر, ، وأنا أعلم) لوحة المفاتيح باستخدام C# و Visual Studio 2008.

تتبعت هذا الدليل لمعرفة كيفية التقاط مكابس المفاتيح ذات المستوى المنخفض. هذا يعمل بشكل جيد لتجاوز الأحرف الأبجدية العادية على لوحة المفاتيح الخاصة بي ، لكن يبدو أنني بحاجة إلى المزيد لأصنعها Caps lock يتصرف مثل كنترول.

فهمي (الذي قد يكون غير صحيح) هو ذلك Caps lock و كنترول يتم التعامل معها تمامًا عن بعضها البعض منذ ذلك الحين Caps lock هو مفتاح تبديل في حين كنترول هو مجرد واحد "طبيعي".

إذن ما أحاول فهمه هنا هو كيفية صنعه Caps lock تتصرف مثل كنترول المفتاح على أدنى مستوى وأيضًا كيفية جعل الطبيعة العادية كنترول مفتاح التصرف مثل أ Caps lock مفتاح.

شكرًا

هل كانت مفيدة؟

المحلول

الحفاظ على منطق يمثل حالة قفص القبعات المتوقعة. عندما يتم ضرب مفتاح قفل Caps ، قم بتعيين الأنظمة Caps lock القيمة مرة أخرى إلى قيمة Bool. متي كنترول يتم ضربه ، قم بتبديل الحالة المتوقعة لقفل Caps وتعيين قيمة قفل غطاء النظام على قيمة Bool.

استخدم ما يلي لتعيين الحالة الأولية المتوقعة:

[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;

أضف منطقًا خاصًا في HookCallback (من الرابط الذي قدمته) لمتى كنترول و Caps lock ضربت. قفل القبعات عندما يكون LPARAM &H14. Ctrl هو عندما يكون Lparam &H11.

للحصول على/تعيين النظام Caps lock القيمة:

http://social.msdn.microsoft.com/forums/en-us/csharpgeneral/thread/fb8308e5-7620-43cc-8ad8-be67d94708fa/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top