Hibernálás, felébresztés

A számítógépet hibernáljuk (csak a billentyüzetben van áram), és a megadott időpontban felébresztjük

implementation
function SetSuspendState (Hibernate: boolean; ForceCritical: boolean; DisableWakeEvent: boolean): boolean; stdcall; external 'Powrprof.dll';
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
liDuTime:LARGE_INTEGER;
ebreszt:SYSTEMTIME;
ftime:FILETIME;
fitime:FILETIME;
hTimer:Cardinal;
begin
ebreszt.wYear:=2009;
ebreszt.wMonth:=2;
ebreszt.wDay:=24;
ebreszt.wHour:=10;
ebreszt.wMinute:=21;
ebreszt.wSecond:=0;
ebreszt.wMilliseconds:=0;
SystemTimeToFileTime(ebreszt,ftime);
LocalFileTimeToFileTime(ftime,fitime);
liDuTime.LowPart:=fitime.dwLowDateTime;
liDuTime.HighPart:=fitime.dwHighDateTime;
hTimer:=CreateWaitableTimer(NIL,TRUE,NIL);
SetWaitableTimer(hTimer,lidutime.quadpart,1000,NIL,NIL,true);
SetSuspendState(false,true,false);
CancelWaitableTimer(htimer);
end;