如何以编程方式防止Windows从硬盘驱动器停转?

我的程序在硬盘可用空间上执行任务。 任务相当长, 需要1-2个小时

问题是,在笔记本电脑上,用户闲置几分钟后,硬盘可能会closures。

如何以编程方式阻止Windows从硬盘旋转(关机)?

为了防止系统进入空闲模式,您可以尝试使用SetThreadExecutionState函数。 此函数通知系统应用程序正在使用中,并允许您指定线程的执行要求。 用法可以像这样,但我不确定这是否也会影响磁盘掉电计时器:

 type EXECUTION_STATE = DWORD; const ES_SYSTEM_REQUIRED = $00000001; ES_DISPLAY_REQUIRED = $00000002; ES_USER_PRESENT = $00000004; ES_AWAYMODE_REQUIRED = $00000040; ES_CONTINUOUS = $80000000; function SetThreadExecutionState(esFlags: EXECUTION_STATE): EXECUTION_STATE; stdcall; external 'kernel32.dll' name 'SetThreadExecutionState'; procedure TForm1.Button1Click(Sender: TObject); begin if SetThreadExecutionState(ES_CONTINUOUS or ES_SYSTEM_REQUIRED or ES_AWAYMODE_REQUIRED) <> 0 then try // execute your long running task here finally SetThreadExecutionState(ES_CONTINUOUS); end; end; 

或者也可以使用为Windows 7设计的PowerCreateRequestPowerSetRequestPowerClearRequest新功能,但是文档很混乱,目前还没有发现它们的用法。

或者,您可以通过PowerWriteACValueIndexPowerWriteDCValueIndex函数使用GUID_DISK_SUBGROUP电源设置子组修改电源设置。

Windows不允许应用程序禁用电源控制更改,因为有问题的应用程序导致电池电量耗尽。 请参阅http://blogs.msdn.com/b/oldnewthing/archive/2007/04/16/2148139.aspx

当系统电源状态即将改变时,您可以得到通知。 请参阅WM_POWERBROADCAST消息 。