我有一台戴尔电脑,前面有 4 个诊断灯,在 POST 期间亮起,然后保持熄灭状态。是否可以从 Windows 中操纵它们?使用写入低内存位置是否可行inpout32
?欢迎任何想法和知识 - 我根本没有找到有关此主题的任何讨论。
答案1
由于它们仅在 POST 中处于活动状态,我怀疑它们不是由内存控制的,更可能是由端口控制的。基本上在 POST 期间,BIOS 将各种 POST 测试的结果回显到端口 80。与其说是内存位置,不如说是可寻址的硬件端口 - 例如端口 378h 是 LPT 端口。BIOS 打开与该硬件线路的连接,通过在该线路上推送某个字节将上一次已知的良好测试输出给它。POST 卡监视端口 80 地址,读取传入的内容并显示结果。
也就是说,理论上你可以编写某种程序来处理该级别的硬件,并将字节推送到端口,看看它是否激活 LED。我不知道 LED 的监视器端口是 80 还是其他端口,以及/或者他们是否有某种芯片来读取代码并将其转换为特定的 LED 模式。
答案2
感谢 Blackbeagle,经过一番尝试,我终于搞清楚了一切。所以,以下是如何控制 Dell Optiplex GX520 的前灯:
您需要写入 PC 上的硬件端口。在 Windows XP 及以下版本中,可以使用inpout32.dll
以下库:http://logix4u.net/parallel-port/16-inpout32dll-for-windows-982000ntxp这里,位 1 是最低有效位,而位 8 是最高有效位。
- 对角线灯 1:
- 打开:将端口 8B8h 上的位 1 设置为关闭
- 关闭:将端口 8B8h 上的位 1 设置为开启
- 对角线灯 2:
- 打开:将端口 88Eh 上的位 4 设置为关闭
- 闪烁:设置端口 89Ah 上的位 4
- 关闭:将端口 88Eh 上的位 4 设置为开启
- 对角线灯 3:
- 打开:将端口 88Eh 上的位 5 设置为关闭
- 闪烁:设置端口 89Ah 上的位 5
- 关闭:将端口 88Eh 上的位 5 设置为开启
- 对角线灯 4:
- 开启:将端口 8B8h 上的位 4 设置为开启
- 关闭:将端口 8B8h 上的位 4 设置为关闭
- HDD 活动指示灯:
- 始终开启:将端口 C34h 上的位 1 设置为关闭
- 始终关闭:将端口 C34h 上的位 3 设置为关闭
- 正常:在端口 C34h 上设置位 1 和位 3
- 电源指示灯:
- 亮起:将端口 C50h 上的位 1 设置为关闭
- 暗淡时:在端口 C50h 上设置位 1
- 关闭:将端口 C50h 上的位 1 设置为打开,并将端口 C5Eh 上的位 1 设置为关闭
- CD/DVD 灯:(这将断开驱动器与系统的连接!)
- 亮 3 秒。(通过重新启动驱动器):发送值1到端口C53h
- 重置上述命令:发送值8到端口C53h
警告:向某些硬件端口(此处未列出)发送值可能会导致系统崩溃,需要关闭电源才能修复。此外,这可能不适用于其他戴尔型号。