Per impedire al sistema di entrare in modalità di inattività, provare a utilizzare la funzione SetThreadExecutionState
. Questa funzione informa il sistema che l'applicazione è in uso e consente di specificare i requisiti di esecuzione del thread. L'utilizzo può essere così, ma non sono sicuro se questo riguarda anche il potere del disco temporizzatore giù:
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;
O c'è a disposizione anche la nuova serie di funzioni PowerCreateRequest
, PowerSetRequest
e PowerClearRequest
progettati per Windows 7, ma la documentazione è confusa e non ho trovato alcun esempio del loro utilizzo in questo momento.
Oppure è possibile modificare le impostazioni di alimentazione tramite le funzioni PowerWriteACValueIndex
o PowerWriteDCValueIndex
con il sottogruppo GUID_DISK_SUBGROUP
delle impostazioni di alimentazione.
Impostare manualmente un piano di alimentazione diverso dal pannello di controllo. Vorrei eliminare un programma che cambia il piano di alimentazione alle mie spalle. – kludg
Il computer spegne il disco mentre è in uso? Non mi sembra davvero giusto. Sei sicuro? –
In breve, Windows non spegnerà il disco durante la scrittura di un disco attivo, ma l'OP non sta eseguendo una corretta lettura di file o scrittura di file e pertanto Windows potrebbe sospendere il disco o l'intero computer. L'OP potrebbe essere leggermente errato nel descrivere il problema. –