2

我正在编写一个使用大写锁定作为切换开关的程序。最好设置键的 LED 以显示我的程序是打开还是关闭,就像 capslock 键自然一样。

我知道我可以SendInput('Capslock');或以其他方式实际打开和关闭大写锁定。但是我的应用程序是一个打字程序,我不想处理将打开它的全大写键翻译成小写/大写的问题。我最终可能会走这条路,但不是这个版本。

然而,我有兴趣只打开 LED 灯而不实际打开大写锁定。有没有办法做到这一点?

谢谢你。

4

2 回答 2

2

我很确定你不能在不切换实际的大写锁定的情况下切换 LED,除非你正在编写键盘驱动程序。(我不建议这样做!)

于 2010-02-11T23:09:45.710 回答
2

Miranda IM 有一个名为“ Keyboard Notify Ext. ”的插件,其源代码中包含控制 LED 的 C 实现。请参阅源代码中的文件 keyboard.c。可能您可以将其移植到 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);
于 2010-03-22T13:59:36.247 回答