I am using
SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(
SystemEvents_PowerModeChanged
);
to tell when Windows is
According to MSDN, the value of e.Mode (your event handler should have a second parameter of PowerChangedEventArgs e) will be an enum of one of "Resume", "StatusChange" or "Suspend". However, it doesn't appear to provide more detail than this, so one assumes that if the status is Suspend, then the PC is either sleeping or hibernating.
HTH,
Benjamin