Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Evitar que windows entre en modo ahorro de energia o suspension (https://www.clubdelphi.com/foros/showthread.php?t=67187)

cocute 04-04-2010 13:03:51

Evitar que windows entre en modo ahorro de energia o suspension
 
me gustaria añadir una opción a mi programa que detecte si esta activado el modo de ahorro de energia de windows y si es así lo desactive y al cerrar el programa lo deje como estaba.

vamos, y que sirva para cualquier version de windows.


pensandolo bien, quizas simplemente creando algo de actividad con un ttimer cada ciertos minutos evitaria la suspension del sistema?
pero no se que tipo de actividad podria crear, emular un movimiento del raton se me ocurre.

gracias.

Red_Leon 08-04-2011 11:23:03

Buenas,
Estaria interesado en si lo conseguistes y si es así ¿como?, ya que estoy en el mismo caso, debo de anular que el equipo entre en suspension miestras que mi programa este en ejecución.

Gracias.

Un Saludo

farute 08-04-2011 11:40:34

al final creo que lo dejé estar, no recuerdo exactamente que es lo que estaba haciendo cuando lo pregunté,
pero creo que como decía añadiendo a un timer por ejemplo un movimiento del raton o algo así debería servir. ¿no?

Ñuño Martínez 08-04-2011 12:02:24

¡Por poco responde al mensaje justo un año después! :eek:

Bueno, yo supongo que habrá alguna forma de "marcar" la aplicación o que esta desactive la suspensión llamando al API de Windows. Yo es que no uso de eso, pero seguro que en la MSDN hay información al respecto.

Red_Leon 11-04-2011 09:49:28

Bueno, despues de 2 días he encontrado la solución. Tal como decia el amigo Ñuño buscando en el MSDN, encontre una función del kernel que no viene soportada por Delphi a priori. Aqui abajo la dejo por si a alguien le viene bien. Aunque sea dentro de otro año jjjj. :)

Código Delphi [-]
const
  ES_SYSTEM_REQUIRED = $00000001;
  ES_DISPLAY_REQUIRED = $00000002;
  ES_USER_PRESENT = $00000004;
  ES_AWAYMODE_REQUIRED = $00000040;
  ES_CONTINUOUS = $80000000;

type
  EXECUTION_STATE = DWORD;

procedure SetThreadExecutionState(ESFlags: EXECUTION_STATE) ; stdcall; external kernel32 name 'SetThreadExecutionState';

{Evita la hibernación del PC}
procedure evitarHibernacion;
begin
  SetThreadExecutionState(ES_CONTINUOUS or ES_SYSTEM_REQUIRED or ES_DISPLAY_REQUIRED);
end;

Basta con llamar a la función una sola vez en la ejecución del programa, no hace falta llamarla con un Timer o cada cierto tiempo. Probado y testeado.

Salud compañeros!


La franja horaria es GMT +2. Ahora son las 20:13:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi