2010-02-11 5 views
2

J'écris un programme qui utilise le verrouillage des majuscules comme interrupteur à bascule. Ce serait bien de régler la LED de la touche pour montrer que mon programme est allumé ou éteint, comme le fait naturellement la touche capslock.Façon d'allumer la lumière de verrouillage des majuscules du clavier sans activer le verrouillage des majuscules?

Je sais que je pourrais simplement SendInput('Capslock'); ou autre pour activer ou désactiver le verrouillage des majuscules. Mais mon application est un programme de frappe, et je ne veux pas avoir à faire avec la traduction des touches majuscules que l'activation me donnerait dans leurs cas inférieurs/supérieurs. Je pourrais éventuellement suivre cette route, mais pas pour cette version.

Je souhaiterais toutefois simplement allumer la lumière LED SANS en activant le verrouillage des bouchons. Y'a-t'il un quelconque moyen d'y arriver?

Merci.

+10

Vous pourriez vouloir reconsidérer votre conception. Si l'activation de la touche de verrouillage des majuscules ne permet pas aux utilisateurs de saisir des majuscules, votre application présente de grandes failles de convivialité. –

+1

J'avais l'habitude d'avoir un plugin MSN Messenger il y a des années qui a flashé le verrouillage des majuscules/défilement lock/etc lumière quand j'ai reçu un nouveau message instantané. J'ai tapé quelques fois par erreur en majuscule, et le plugin a été rapidement désinstallé. – alex

+5

Je peux le voir maintenant ... votre programme se bloque sans cérémonie et la LED de verrouillage des majuscules est inversée. Ensuite, une question que tout le monde pense est stupide est postée sur SuperUser ... –

Répondre

2

Je suis assez sûr que vous ne pouvez pas basculer la LED sans basculer le verrouillage Caps réel, sauf si vous écriviez un pilote de clavier. (Je ne le recommande pas!)

+0

Il devrait construire un périphérique matériel livré avec le logiciel Un grand globe dans une boîte, avec l'étiquette "TOGGLE" – alex

+0

Si vous démarrez votre propre système d'exploitation et avez un accès direct en écriture sur le port, le clavier est branché ... mais en C#? J'en doute. –

2

Il y a un plugin pour Miranda IM nommé "Keyboard Notify Ext." qui contient dans son code source C l'implémentation de leds de contrôle. Voir le fichier keyboard.c dans la source. Vous pouvez probablement le porter sur C#.

Voici les points saillants les plus intéressants à partir du code source:

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); 
Questions connexes