打开键盘帽的方法 - 锁定灯而不实际打开大写锁定?

时间:2010-02-11 22:44:33

标签: c# keyboard keyboard-shortcuts capslock sendinput

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

我知道我可以SendInput('Capslock');或其他什么来实际打开和关闭大写锁定。但我的应用程序是一个打字程序,我不想处理翻译全部大写的键,打开它会让我进入他们的低/大案件。我最终可能会走这条路,但不是这个版本。

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

谢谢。

3 个答案:

答案 0 :(得分:2)

除非您正在编写键盘驱动程序,否则我很确定您无法在不切换实际大写锁定的情况下切换LED。 (我不推荐这个!)

答案 1 :(得分:2)

Miranda IM有一个名为“Keyboard Notify Ext.”的插件,其中包含控制LED的源代码C实现。请参阅source中的文件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);

答案 2 :(得分:2)

您可以在Faking num lock, caps lock and scroll lock leds

的C#上找到更改键盘指示器的代码