O evento 42 ocorre tarde demais (no final do processo, não há tempo para fazer qualquer coisa útil) porque é pretendido como uma "documentação" para diagnósticos subseqüentes, não uma notificação antes acontecer. (Eu não entendo como poderia um moderador de MSFT aconselhar isso ?)
Infelizmente, não vi uma solução funcional para o seu problema.
mas tenho certeza que o Windows faz fornecer uma notificação antes do evento,
embora não no log de eventos.
Isso significa que você precisa criar / usar um aplicativo em segundo plano sempre em execução
(~ um "daemon") que captura esta notificação pré-espera e depois faz
o que você gosta.
Eu não estou ciente de uma aplicação existente que pode fazer isso, nem
Eu conheço as APIs relevantes do Windows; mas até que uma resposta melhor seja fornecida, aqui estão alguns pontos de partida que podem ajudá-lo a elaborar uma solução:
- As seguintes páginas do MSDN parecem levar a informações sobre a notificação em si:
link
link
link - Se você não quer se aprofundar no C ++, então o comando start_power_monitor do A extensão TWAPI do Tcl / Tk parece promissora (veja o evento apmsuspend ). O Tcl / Tk não é um produto complexo que requer instalação e configuração, mas um executável simples e muito poderoso que, quando acoplado ao único TWAPI .dll , concorre com o PowerShell (com muito menos espaço) (embora seguramente o PowerShell também poderia lidar com o problema, apenas eu não sei os comandos / pacotes relevantes.)
ATUALIZAÇÃO:
Não há como "suspender o evento de suspensão" porque a Microsoft interrompeu PBT_APMQUERYSUSPEND que permitia isso no XP e no Vista. Em vez disso, agora diz que você não pode impedir que o usuário coloque o computador em suspensão:
Applications should respect that the user expects a certain behavior when they close the lid on their laptop or press the power button.
Apenas o evento PBT_APMSUSPEND permaneceu, após o qual
The system allows approximately two seconds for an application to handle this notification.