طريقة لتشغيل ضوء قفل قفل لوحة المفاتيح دون تحول في الواقع إلى قبعات قفل؟

StackOverflow https://stackoverflow.com/questions/2248358

سؤال

أنا أكتب برنامجا يستخدم قبعات قفل كمسافة تبديل. سيكون من الجيد تعيين LED الخاص بالمفتاح لإظهار أن برنامجي قيد التشغيل أو إيقاف تشغيله، مثل مفتاح Capslock يفعل بشكل طبيعي.

أعلم أنني أستطيع فقط SendInput('Capslock'); أو أيا كان ذلك في الواقع تحويل قبعات القبعات وإيقافها. لكن تطبيقي هو برنامج الكتابة، ولا أريد أن أضطر إلى التعامل مع ترجمة مفاتيح جميع الأغطية التي تحولها من شأنها أن تعطيني في حالاتها الأقل / العليا. قد أذهب هذا الطريق في النهاية، ولكن ليس لهذا الإصدار.

ومع ذلك، سأكون مهتما فقط بتشغيل ضوء LED بدون في الواقع تحول قبعات القبعات. هل هناك اي طريقة لعمل ذلك؟

شكرًا لك.

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

المحلول

يمكنك العثور على رمز لتغيير المؤشرات على لوحة المفاتيح من C # في Faking Num Lock، قبعات قفل وصيدات قفل التمرير

نصائح أخرى

أنا متأكد من أنك لا تستطيع تبديل LED دون تبديل قفل الأقسام الفعلية، إلا إذا كنت تكتب برنامج تشغيل لوحة المفاتيح. (أنا لا أوصي بذلك!)

هناك مكون إضافي ل Miranda IM المسمى "لوحة المفاتيح تخطر تحويلة."والذي يحتوي على التعليمات البرمجية المصدرية في تنفيذ المصابيح السيطرة. انظر لوحة مفاتيح الملف. في المصدر. ربما يمكنك منفذه إلى C #.

هنا أبرز أكثر إثارة للاهتمام من شفرة المصدر:

mir_snprintf(aux1, sizeof(aux1), "Kbd%d", i);
mir_snprintf(aux2, sizeof(aux2), "\\Device\\KeyboardClass%d", i);
DefineDosDevice(DDD_RAW_TARGET_PATH, aux1, aux2);

mir_snprintf(aux1, sizeof(aux1), "\\\\.\\Kbd%d", i);
hKbdDev[i] = CreateFile(aux1, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

...

result |= DeviceIoControl(hKbdDev[i], IOCTL_KEYBOARD_SET_INDICATORS, &InputBuffer, DataLength, NULL, 0, &ReturnedLength, NULL);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top