delphi 如何通过编程防止Windows硬盘驱动器降速?

7fyelxc5  于 2022-12-23  发布在  Windows
关注(0)|答案(2)|浏览(156)

我的程序在硬盘空闲空间上执行一个任务。这个任务相当长,需要1-2个小时
问题是,在笔记本电脑上的硬盘可能会在几分钟后关闭,当用户不活动。

如何以编程方式防止Windows硬盘降速(关机)?

vxqlmq5t

vxqlmq5t1#

为了防止系统进入空闲模式,你可以尝试使用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子组。

jhiyze9q

jhiyze9q2#

Windows不允许应用程序禁用电源控制更改,因为有错误的应用程序导致电池耗尽。请参阅http://blogs.msdn.com/oldnewthing/archive/2007/04/16/2148139.aspx
当系统电源状态即将更改时,您可以收到通知。请参阅WM_POWERBROADCAST Messages

相关问题