Для предотвращения перехода системы в режим ожидания вы можете попробовать использовать функцию 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;
Или также доступен новый набор функций PowerCreateRequest
, PowerSetRequest
и PowerClearRequest
, разработанные для Windows 7, но документация сбивает с толку, и я пока не нашел ни одного примера их использования.
Или вы можете изменить параметры питания с помощью функций PowerWriteACValueIndex
или PowerWriteDCValueIndex
с подгруппой параметров питания GUID_DISK_SUBGROUP
.