У меня сделано очень просто:
блок питания (до ИБП) держит включенной релюху, которая замыкает на COM-порту два контакта TXD и RXD;
программа раз в 10 секунд шлёт в порт слово (число из GetTickCount) и тут же его читает, если слово прочлось правильно, значит питание есть и контакты замкнуты, иначе - "пора спать".
ЗЫ: программа запущена с правами, позволяющими, например, выключить комп.