سؤال

لدي نظام حيث لدي لوحات مفاتيح متعددة وأحتاج حقًا إلى معرفة لوحة المفاتيح التي تأتي منها ضغطة المفتاح.لشرح الاعداد :

  1. لدي جهاز كمبيوتر عادي ولوحة مفاتيح USB
  2. لدي شاشة VGA خارجية مع بعض المفاتيح الصلبة
  3. يتم تعيين المفاتيح الصلبة على أنها لوحة مفاتيح USB قياسية، حيث يتم إرسال عدد محدود من رموز المفاتيح (F1 وF2 وReturn و+ و-)

لدي خطاف منخفض المستوى (في C# ولكنه في الواقع يستدعي وظيفة Win32) وهو قادر على التعامل مع الإدخال حتى عندما لا يكون تطبيقي مركّزًا.

المشكلة هي أنه عند استخدام لوحة المفاتيح العادية، يتم التقاط بعض رموز المفاتيح المعينة بواسطة التطبيق الذي يتم تشغيله على الشاشة الخارجية.إحدى الضغطات على المفاتيح التي ترسلها الشاشة الخارجية وتستخدم للتأكيد هي VK_RETURN.ما لم أتمكن من تحديد "الجهاز" والتصفية عليه، يمكن للمستخدم تنفيذ إجراءات وتأكيدها على شاشة دون أن ينظر إليها.

كيف أعرف لوحة المفاتيح المسؤولة عن الضغط على المفاتيح؟

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

المحلول

نعم أقف مصححًا، يا سيء، أتعلم شيئًا جديدًا كل يوم.

وهذه محاولتي للتعويض :):

  • قم بتسجيل الأجهزة التي تريد استخدامها للإدخال الأولي (لوحتي المفاتيح) باستخدام ::RegisterRawInputDevices().

  • يمكنك الحصول على هذه الأجهزة من GetRawInputDeviceList()

  • بعد تسجيل أجهزتك، ستبدأ في تلقي رسائل WM_INPUT.

  • يحتوي lParam الخاص برسالة WM_INPUT على بنية RAWKEYBOARD التي يمكنك استخدامها لتحديد لوحة المفاتيح التي يأتي منها الإدخال، بالإضافة إلى رمز المفتاح الظاهري ونوع الرسالة (WM_KEYDOWN، WM_KEYUP، ...)

  • لذا يمكنك تعيين علامة تشير إلى مصدر الرسالة الأخيرة ثم إرسالها إلى معالجات الإدخال العادية للوحة المفاتيح.

نصائح أخرى

لا توجد طريقة للقيام بذلك.يلخص Windows هذا لك.كما ذكرنا سابقًا، تحتاج إلى كتابة/تعديل برنامج تشغيل الجهاز.

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