c# - significado - que es suspender pc
¿Cómo puedo saber cuándo Windows entra o sale del modo de suspensión o Hibernación? (6)
En .NET, use el evento PowerModeChanged . En Win32, use el mensaje WM_POWERBROADCAST .
¿Es posible suscribirse a un evento de Windows que se activa cuando Windows entra o sale del estado de Suspensión o Hibernación?
Necesito que mi aplicación se haga consciente cuando la computadora se va a dormir para realizar una limpieza y evitar problemas de sincronización cuando sale del modo de suspensión.
No estoy seguro de la frecuencia con la que desea monitorear esto, pero si escribe un servicio en .NET puede anular ServiceBase, establecer CanHandlePowerEvent en verdadero y luego se le notificarán los cambios de energía a través de la enumeración PowerBroadcastStatus.
Puede supervisar el evento Win32_PowerManagementEvent WMI
Microsoft.Win32.SystemEvents.PowerModeChanged
evento Microsoft.Win32.SystemEvents.PowerModeChanged
le dará esta información. Este evento está disponible en todas las variantes del .NET framework lanzado por Microsoft hasta el momento.
En una aplicación Visual Studio 2005 C ++ MFC, necesitará agregar ON_MESSAGE()
a su mapa de mensajes buscando el mensaje WM_POWERBROADCAST
como en este ejemplo:
BEGIN_MESSAGE_MAP(CFrameworkWndDoc, CWindowDocument)
//{{AFX_MSG_MAP(CFrameworkWndDoc)
ON_WM_CHAR()
ON_WM_TIMER()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_POWERBROADCAST, OnPowerMsgRcvd)
END_MESSAGE_MAP()
Luego necesitará agregar la función del manejador de mensajes junto con el cambio de definición de clase para declarar la función miembro para el manejador de mensajes, de modo que pueda verificar la variable wParam
para el tipo de mensaje como en este esqueleto:
// Handle the WM_POWERBROADCAST message to process a message concerning power management
// such as going to Sleep or Waking Up.
LRESULT CFrameworkWndDoc::OnPowerMsgRcvd(WPARAM wParam, LPARAM lParam)
{
switch (wParam) {
case PBT_APMPOWERSTATUSCHANGE:
TRACE0("PBT_APMPOWERSTATUSCHANGE received/n");
break;
case PBT_APMRESUMEAUTOMATIC:
TRACE0("PBT_APMRESUMEAUTOMATIC received/n");
break;
case PBT_APMRESUMESUSPEND:
TRACE0("PBT_APMRESUMESUSPEND received/n");
break;
case PBT_APMSUSPEND:
TRACE0("PBT_APMSUSPEND received/n");
break;
}
return 0;
}
Lo que he visto es que una prueba usando lo anterior en una aplicación que se ejecuta en Windows 7 que se inicia en el depurador y luego hago manualmente que mi PC ejecute la aplicación en Suspensión, verá el siguiente mensaje:
PBT_APMSUSPEND received
Luego, cuando la PC se reinicie y yo inicie sesión, lo que veré en la ventana de salida del depurador son dos mensajes uno detrás de otro:
PBT_APMRESUMESUSPEND received
PBT_APMRESUMEAUTOMATIC received
Todo lo que he encontrado hasta ahora indica que no tienes indicación de si saldrás de un estado de suspensión o de Hibernación. Todavía estoy investigando más sobre lo que se debe hacer al suspender o reanudar el manejo de archivos y dispositivos. He visto indicaciones de que los identificadores de archivo a los puertos COM ya no son válidos después de reanudar. Tampoco estoy seguro acerca de las interfaces con otros procesos, por ejemplo, las conexiones de bases de datos.
Además de los estados de administración de energía Sleep e Hibernate estándar, Microsoft ha introducido el estado de energía de Connected Standby con Windows 8 y 8.1, que tiene algunas ramificaciones en el diseño de aplicaciones dependiendo del tipo de aplicación.
Las aplicaciones de escritorio generalmente no requieren trabajo adicional para integrarse con el modo de espera conectado.
El moderador de actividad de escritorio (DAM) es el componente de Windows que pausa todas las aplicaciones de escritorio y acelera el tiempo de ejecución de los servicios del sistema de terceros durante el modo de espera conectado. El objetivo del DAM es mantener la compatibilidad básica del software con las aplicaciones y servicios existentes, pero mitigar su impacto en la duración de la batería durante el sueño.
Windows impide que las aplicaciones de escritorio se ejecuten durante cualquier parte del modo de espera conectado después de que se complete la fase DAM. Windows permite que los servicios del sistema de terceros se ejecuten en un modo acelerado después de completar la fase DAM. En este modo, un servicio de terceros puede ejecutarse durante no más de un segundo del reloj de pared cada 30 segundos.
El Art of Graceful Application Suspension de Lynn Merrill de Intel contiene información sobre el manejo de varios tipos de mensajes de Windows asociados con Power Management en Windows, sin embargo, es fecha 2005, por lo que no todo el material puede pertenecer a Windows después de Windows XP. Hay al menos un mensaje que ya no se usa en la secuencia de mensajes descrita en este documento como el que comienza con Windows Vista. PBT_APMQUERYSUSPEND
mensaje PBT_APMQUERYSUSPEND
que se usó para solicitar si una aplicación podía suspender ya no es utilizado por Windows. La función SetThreadExecutionState()
ahora se usa para indicar que un hilo no se puede interrumpir con un cambio al estado de Suspensión o Hibernación. Consulte las respuestas en No se pueden capturar los mensajes de suspensión de suspensión (winxp) para obtener detalles sobre los cambios en el mensaje de estado de administración de energía.
Puede suscribirse a NetworkChange.NetworkAvailabilityChanged y NetworkChange.NetworkAddressChanged.
Generalmente, comienzo un temporizador de dos segundos para poder reanudar las comunicaciones de red después de estar en modo de suspensión cuando se agota el tiempo.