Ahorrar energía con Delphi

A continuación os presento una serie de funciones para ahorrar energía en vuestros equipos.

//pasar monitor a modo de ahorro de energía
procedure modoAhorroDeEnergia;
begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
end;

//apagar monitor
procedure apagarMonitor;
begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
end;

//Encender monitor:
procedure encenderMonitor;
begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);
end;


//Apagar equipo (requiere permisos administrativos)
PROCEDURE apagarEquipo;
begin
IF NOT (ExitWindowsEx(EWX_SHUTDOWN + EWX_FORCE, 0)) then
showmessage('No puedo apagar el equipo');
end;

//Reiniciar equipo
PROCEDURE ReiniciarEquipo;
begin
IF NOT (ExitWindowsEx(EWX_REBOOT, 0)) then
showmessage('No puedo reiniciar el equipo');
end;

//Devuelve TRUE si el sistema puede Hibernar
FUNCTION TForm1.SystemCanHibernate(): boolean;
RESOURCESTRING
rsDll = 'powrprof.dll';
rsFunc = 'IsPwrHibernateAllowed';
TYPE
TFunc = FUNCTION: boolean; stdcall;
VAR
func: TFunc;
hDll: THandle;
BEGIN
result := false;
hDll := LoadLibrary(PChar(rsDll));
IF (hDll <> 0) THEN
TRY
@func := GetProcAddress(hDll, PChar(rsFunc));
result := Assigned(func) AND func();
FINALLY
FreeLibrary(hDll);
END;
END;


//Devuelve TRUE si el sistema puede ser suspendido
FUNCTION tform1.SystemCanSuspend(): boolean;
RESOURCESTRING
rsDll = 'powrprof.dll';
rsFunc = 'IsPwrSuspendAllowed';
TYPE
TFunc = FUNCTION: boolean; stdcall;
VAR
func: TFunc;
hDll: THandle;
BEGIN
result := false;
hDll := LoadLibrary(PChar(rsDll));
IF (hDll <> 0) THEN
TRY
@func := GetProcAddress(hDll, PChar(rsFunc));
result := Assigned(func) AND func();
FINALLY
FreeLibrary(hDll);
END;
END;


Relacionados:
wake on lan 
Detectar inactividad en el sistema

Apagar monitor pulsando una tecla
Apagar servidor de red cuando se apaguen los terminales

No hay comentarios:

Publicar un comentario