Sim e (principalmente) não.
Você pode detectar um evento de desligamento. Quando o Windows está prestes a desligar, ele envia um WM_QueryEndSession
para todos os aplicativos abertos. Para detectar isso, você teria que ter um script ou programa em execução em segundo plano para detectar e manipular o evento. No entanto, não parece haver nenhuma maneira de cancelar o encerramento, a menos que o desligamento tenha sido iniciado a partir da máquina local e do usuário .
O script / aplicativo pode, então, pegar o desligamento e perguntar se você quer sair do script / aplicativo, no qual você pode cancelar. Isso impedirá que a máquina seja desligada, mas não impedirá que outros aplicativos e serviços possivelmente sejam encerrados.
Você nem precisa de um script para isso, basta abrir o bloco de notas e digitar algum texto. Como você tem dados não salvos no Bloco de Notas, o Windows aguardará e perguntará se deseja continuar com o desligamento, dando a você a oportunidade de cancelar. Novamente, isso só funcionará se você iniciar o desligamento localmente.
Existe um evento Win32_ComputerShutdownEvent
do WMI, que ocorre quando um computador é desligado através de um comando remoto . No entanto, só pode receber este evento. Quando o evento é recebido, o computador local terminará o script quando o evento for entregue.