Ersteinmal willkommen in der
DP!
Zu deinem Code: PBT_APMSTANDBY und PBT_APMRESUMESTANDBY werden laut
MSDN glaube ich nicht unterstützt (Warum auch immer...). Außerdem verstehe ich nicht ganz wieso du beim Eintritt in den Standby auch ein ShellExecute ausführst. Falls das beabsichtigt ist, was ich für seltsam halte (wenn ich in den Standby gehe will ich doch keine Programme starten
), solltest du vielleicht mal einen Blick auf
PBT_APMQUERYSUSPEND werfen. Damit hast du afaik 20 statt 2 Sekunden Zeit und kannst den Übergang zum Standby auch verhindern (Aber Vorsicht: Ab Vista ist das schon wieder raus...).
Zu deiner zweiten Frage: Laut
MSDN war das meine ich schon richtig. Wie man nun erfahren könnte ob es sich um einen Standby oder Ruhezustand handelt weiß ich gar nicht.