Como detectar se o Windows vai hibernar ou suspender?

Estou usand

SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(
    SystemEvents_PowerModeChanged
);

para dizer quando o Windows está suspenso. Mas como sei se ele entra em hibernação ou suspensão?

Existe um método .Net ou PInvoke para fazer isso?