¿Cómo detectar si Windows va a hibernar o suspender?

Estoy usand

SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(
    SystemEvents_PowerModeChanged
);

para saber cuándo se suspende Windows. Pero, ¿cómo sé si va a hibernar o suspender?

Existe un método .Net o PInvoke para hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta