[C con Clase] Inactividad del sistema

Juan Antonio jalr43 en hotmail.com
Jue Dic 14 14:48:23 CET 2006


Hola Mario,

he mirado algo más el tema. Te comento sobre dos estados de energía del PC:

- El sistema pasa a modo de inactividad cuando durante el tiempo que tiene programado (botón derecho en el escritorio, protector de pantalla y luego botón energía) no se realiza nada en el PC. Importante si estás descargando cosas de internet no se produce porque está detectando actividad por lo menos en mi PC. Cuando ocurre aparece la típica ventanita azul en windows xp con el listado de usuarios, mensajes de cada uno y estas cosas.El mensaje WM_POWERBROADCAST te avisa 5 segundos antes de de producirse este estado del sistema.

- Si el sistema hiberna, pues hace como los osos...se queda como apagado pero antes guarda todo lo necesario para poder devolver el sistema a como se encontraba antes de hibernar con sólo mover el ratón o pulsar una tecla.

Te recuerdo la primera línea de la función callback:

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

El mensaje anterior que se produce tanto antes de cuando el sistema hiberna como inactiva se captura igual que cualquier otro mensaje:

 switch (message)                  /* handle the messages */
    {
         case WM_COMMAND:
            switch(LOWORD(wParam))
             {
                ....
                break;
             }
             break;
         case WM_POWERBROADCAST:    // Mensaje que nos interesa
             switch(LOWORD(wParam))    //No tengo claro si LWORD es necesario. Funciona colocánolo y quitándolo.
             {
                case PBT_APMSUSPEND:
                     MessageBox(hwnd,"","",MB_OK);    // Tal y como está esto poco antes de hibernar y pasar a inactividad aparece el mensajito.
                     break;
             }
             break;

Dentro del mensaje WM_POWERBROADCAST se pueden dar otros muchos que puedes identificar dentro del switch:

      PBT_APMBATTERYLOW Battery power is low. 
      PBT_APMOEMEVENT OEM-defined event occurred. 
      PBT_APMPOWERSTATUSCHANGE Power status has changed. 
      PBT_APMQUERYSUSPEND Request for permission to suspend. 
      PBT_APMQUERYSUSPENDFAILED Suspension request denied. 
      PBT_APMRESUMEAUTOMATIC Operation resuming automatically after event. 
      PBT_APMRESUMECRITICAL Operation resuming after critical suspension. 
      PBT_APMRESUMESUSPEND Operation resuming after suspension. 
      PBT_APMSUSPEND System is suspending operation. 



También se me ocurre que puedes colocar un MessageBox entre el mensaje y el switch para identificar otra situación que te interese, lo mismo por ejemplo cuando se apaga el monitor o se activa el protector de pantalla también se produce este mensaje y te interesa más así.

case WM_POWERBROADCAST:    // Mensaje que nos interesa
    MessaBox(hwnd,"Entrada al mensaje WM_POWERBR...","Pruebas",MB_OK);
             switch(LOWORD(wParam))    //

Un saludo,
Juan Antonio.

  ----- Original Message ----- 
  From: Mario Contreras 
  To: Lista de correo sobre C y C++ 
  Sent: Thursday, December 14, 2006 12:36 PM
  Subject: Re: [C con Clase] Inactividad del sistema


  Gracias Juan, creo que me servirá, aunque no me queda muy claro cómo hacer que mi programa interprete el mensaje...:S

  Intentaré probar a ver qué sale. Gracias y saludos.



------------------------------------------------------------------------------


  _______________________________________________
  Cconclase mailing list
  Cconclase en listas.conclase.net
  http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20061214/63fbc8b6/attachment.html>


Más información sobre la lista de distribución Cconclase