我的电脑里有很多硬盘(7)。
如果不使用它们,电源选项会在一段时间后让它们进入睡眠状态。 但是因为一切都会产生很多噪音,我想让它们在我想要的时候进入睡眠状态,而不仅仅是在默认的系统超时之后。
在Windows(XP及更高版本)上,最好是在C#中,
如何通过代码将磁盘发送到睡眠状态?
非常感谢您的帮助...
答案 0 :(得分:1)
我不知道直接执行此操作的API,但有些工具可以执行此操作。我见过的是Hard Disk Sleeper。我没有在我自己的机器上使用它,所以我不能说它的质量或效果。
答案 1 :(得分:1)
如果使用IOCTL_ATA_PASS_THROUGH将ATA命令直接发送到驱动器,则可以执行此操作。您需要传递SLEEP命令。
我不认为这是C#的项目。
答案 2 :(得分:1)
AFAIK,这是一个ATA命令,用于设置*向下旋转时间8 - 这意味着它是关闭的驱动器本身。您可以使用IOCTL_ATA_PASS_THROUGH将命令直接发送到驱动器 - 但是我担心您不会将其设置为某个最小值(我不知道它是什么,但它应该在ATA规范中) )。
修改:看起来像古老的hdparm supports it,所以它必须符合ATA规范:
-y 强制IDE驱动器立即进入低功耗待机模式,通常会导致其停止运转。
-Y强制IDE驱动器立即进入功耗最低的睡眠模式,使其完全关闭。在再次访问驱动器之前,需要进行硬重置或软重置(如果需要,Linux IDE驱动程序将自动处理发出重置)。
由于hdparm(以及它用于与驱动器通信的底层Linux内核)是GPL - 如果您没有方便的ATA规范,您应该可以从那里获取详细信息。
或者,只需使用win32 port。
答案 3 :(得分:0)
老实说,我不认为只使用C#(即.NET框架)就可以做到这一点。
这往往需要您深入研究较低级别的语言(至少要弄清楚要与P \ Invoke一起使用的API调用),因为它通常涉及与操作系统密切交互或可能直接和一个司机。
也许你可以从调查Windows Power Management Functions开始,虽然我认为它不允许控制单个硬盘。
答案 4 :(得分:0)
在Windows上,如果驱动器处于睡眠状态(不旋转),则可以简单地使用“ GetDevicePowerState”函数返回FALSE。
https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getdevicepowerstate