Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: bonmario - Febbraio 23, 2018, 08:36:30 am

Titolo: Intercettare spegnimento PC
Inserito da: bonmario - Febbraio 23, 2018, 08:36:30 am
Ciao,
ho un mio programma che:
- quando parte crea un "file civetta" che ha come nome, il nome dell'utente che l'ha lanciato
- quando viene chiuso lo cancella

Questo mi serve per sapere chi lo sta usando.
C'è però un problema in questo meccanismo: se una persona spegne il PC mentre il programma è in funzione, il suo file civetta resta sul disco.

Se il programma potesse "intercettare" la richiesta di spegnimento del PC, potrei fargli cancellare il file civetta in quel momento.

C'è modo di fare questa cosa?


Grazie in anticipo, Mario
Titolo: Re:Intercettare spegnimento PC
Inserito da: nomorelogic - Febbraio 23, 2018, 12:14:30 pm
tramite le procedure pianificate o gli eventi di windows
1) lanciare un .BAT allo spegnimento
2) puoi vedere se c'è qualche API da usare per scatenare azioni allo spegnimento

purtroppo per il punto 2 non ho esperienza, devi cercare su google :)
Titolo: Re:Intercettare spegnimento PC
Inserito da: schumi - Febbraio 23, 2018, 12:58:54 pm
forse sparo una c....ta ma credo che se imposti una conferma di chiusura del programma ("sei sicuro di voler chiudere l'app" Si/No) lo spegnimento di windows dovrebbe fermarsi, l'utente pigia Si e tu cancelli il file.
ripeto che è una riflessione non verificata.

altra soluzione potrebbe essere mettere un timer che scrive data/ora nel file ogni 10 min, quando è vecchio lo cancelli.

ciao
Titolo: Re:Intercettare spegnimento PC
Inserito da: bonmario - Febbraio 23, 2018, 01:17:15 pm
Ok, grazie, appena riesco faccio qualche prova.

Ciao, Mario
Titolo: Re:Intercettare spegnimento PC
Inserito da: Stilgar - Febbraio 23, 2018, 11:01:00 pm
Ciao Mario.
Allora.
Windows? Se si può c'è un "messaggio" nella pipeline dei messaggi ;)

https://msdn.microsoft.com/en-us/library/windows/desktop/aa376890(v=vs.85).aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/aa376890(v=vs.85).aspx)
https://msdn.microsoft.com/en-us/library/windows/desktop/aa376889(v=vs.85).aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/aa376889(v=vs.85).aspx)

Questa è per buttare fuori qualcuno se nel tuo file c'è scritto il nome di qualcuno di antipatico :) Tipo il capo che non ti vuole dare l'aumento ;)
https://msdn.microsoft.com/en-us/library/windows/desktop/aa376872(v=vs.85).aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/aa376872(v=vs.85).aspx)

Linux?
Basta mettere qui " /usr/lib/systemd/system-shutdown/" lo script di pulizia.
(O così ho capito nei vari forum :) )

Se non bastano, mi sa che ci devi spiegare meglio lo scenario.

Stilgar

Edit:
Su windows potresti vedere se gli eventi (https://msdn.microsoft.com/en-us/library/windows/desktop/aa964766(v=vs.85).aspx) di sistema possono aiutarti. Creano un log persistente a livello di sistema operativo per capirci.
Puoi inviare un evento a Windows si attivazione e uno si disattivazione applicazione.
In questo modo puoi anche sapere per quanto tempo è stato usato o se per caso hanno spento brutalmente il pc.
Titolo: Re:Intercettare spegnimento PC
Inserito da: bonmario - Febbraio 24, 2018, 10:14:31 am
Grazie !!!