use*_*591 9 windows delphi winapi hard-drive
我的程序在硬盘可用空间上执行任务.任务很长,需要1-2个小时.
问题是,在笔记本电脑上,当用户处于非活动状态时,硬盘可能会在几分钟后关闭.
如何以编程方式防止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;
Run Code Online (Sandbox Code Playgroud)
或者,也有提供一套新的功能PowerCreateRequest,PowerSetRequest以及PowerClearRequest专为Windows 7,但文档很混乱,我还没有发现在这个时候他们使用的任何例子.
或者您可以通过电源设置子组修改电源设置PowerWriteACValueIndex或PowerWriteDCValueIndex使用其功能GUID_DISK_SUBGROUP.
Windows不允许应用程序禁用电源控制更改,因为错误的应用程序导致电池耗尽.见http://blogs.msdn.com/b/oldnewthing/archive/2007/04/16/2148139.aspx
系统电源状态即将更改时,您可以收到通知.请参阅WM_POWERBROADCAST消息.
| 归档时间: |
|
| 查看次数: |
2693 次 |
| 最近记录: |