【问题标题】:Way to turn on keyboard's caps-lock light without actually turning on caps-lock?在不实际打开大写锁定的情况下打开键盘大写锁定灯的方法?
【发布时间】:2011-01-15 22:37:14
【问题描述】:

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

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

然而,我有兴趣只打开 LED 灯而不实际上打开大写锁定。有什么办法吗?

谢谢。

【问题讨论】:

  • 您可能需要重新考虑您的设计。如果打开大写锁定键不允许用户输入全大写,那么您的应用存在很大的可用性缺陷。
  • 几年前我曾经有一个 MSN Messenger 插件,当我收到一个新的 IM 时,它会闪烁大写锁定/滚动锁定/等灯。大写的我打错了几次,插件很快就被卸载了。
  • 我现在可以看到...您的程序突然崩溃并且大写锁定 LED 反转。然后在 SuperUser 上发布了一个大家都认为很愚蠢的问题...
  • System.Windows.Forms.NotifyIcon 会更容易编码。只需在程序打开或关闭时更改 Icon 属性以指向不同的图标。
  • @cksubs:问题不在于人们使用大写锁定的频率,而在于我们很少了解它的新知识。我们知道大写锁定功能的方式是因为小脑袋很久以前就发现了它,并且已经使用了 10、20...50 年左右。改变它的作用相当于为您的汽车添加一个(作为一项功能)反转方向盘方向的附加组件......

标签: c# keyboard keyboard-shortcuts capslock sendinput


【解决方案1】:

我敢肯定,除非您正在编写键盘驱动程序,否则您无法在不切换实际大写锁定的情况下切换 LED。 (我不建议这样做!)

【讨论】:

  • 他应该构建一个随软件一起提供的硬件外围设备。一个装在盒子里的大地球仪,标有“TOGGLE”
  • 如果您正在启动自己的操作系统并且对插入键盘的端口具有直接写访问权限...但是在 C# 中?我对此表示怀疑。
【解决方案2】:

有一个名为“Keyboard Notify Ext.”的 Miranda IM 插件,其源代码中包含控制 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);

【讨论】:

    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多