PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Fermeture de programme
Fermeture de programme
Débuté par qualite69, 21 sep. 2015 11:04 - 6 réponses
Membre enregistré
23 messages
Posté le 21 septembre 2015 - 11:04
Bonjour à tous,

Je constate sur un application windev 20 66p que le code de fermeture du programme n'est pas exécuté dans le cas de la fermeture de l'application par :
* arrêt de la machine
* ou forcer la fermeture par le gestionnaire des tâches

Or j'ai impérativement besoin de pouvoir modifier un enregistrement avant la fermeture de l'application.
J'ai mis un trace et je constate que le code de fermeture de la fenêtre ouverte ne s’exécute pas non plus (elle n'est pas visible).

Je n'ai pas trop cherché mais y a t-il un moyen d'intercepter cette demande de fermeture de l'application?

D'avance merci à tous ceux qui se penchent sur ce problème.
Py
Posté le 21 septembre 2015 - 11:33
Bonjour,
Or j'ai impérativement besoin de pouvoir modifier un enregistrement
avant la fermeture de l'application.


Ca, ca a tendance à m'inquiéter... Et si quelqu'un se prend les pieds
dans le cable d'alim ? Ou si tu as tout simplement une coupure de courant ?

Si la logique de ton programme OBLIGE à une fermeture propre, je dirais
qu'il faudrait plutôt revoir la logique

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Disponible : WXShowroom.com, WXReplication (open source)
Bientôt : WXEDM (open source)
Plus d'information sur http://fabriceharari.com
Membre enregistré
23 messages
Posté le 21 septembre 2015 - 13:51
Bonjour,

Merci pour votre réponse. Et je comprend parfaitement votre point de vue.
Mais le sujet ici n'est pas la logique applicative de mon logiciel mais belle et bien le comportement d'une application Windev sur une demande de fermeture de l'OS ("signal kill").

Ne pouvons nous pas considérer normal qu'un évènement "fin de programme" soit appelé et traité par Windev?
Tant pis, nous sommes tous habitués à ce genre de situation et nous sommes bien là pour discuter de contournements...

Alors voila: mon appli est un "time-trackeur". Il permet à l'opérateur d'indiquer quelle tâche il en train de réaliser. L'heure de fin de la tâche en cours est enregistré en base de données quand l'opérateur change de tâche, ferme l'application ou ferme son PC...
C'est le dernier cas qui nous intéresse.
Avez-vous des propositions (hormis demander à l'opérateur de systématiquement fermer l'application avant un reboot ou un shutown) ?

Merci d'avance à tous pour idées, bout de codes et autres.

Cordialement,
Py
Posté le 21 septembre 2015 - 14:07
Bonjour,
Si le process de l'application est "tué" par windows (via un fin de tâche),
l'application ne peut rien intercepter.
Et le problème n'est pas dans Windev, car si je ferme de la même façon
Excel, par exemple, aucune demande de confirmation n'est demandée (et adieu
le fichier en cours de saisie !).

Une solution (pas propre) ? Dans la table des tâches, tu mets 2 colonnes: un
booléen qui indique si la tâche est bien fini, et une heure de fin.
Via un timer tu affectes toutes les 10 minutes l'heure actuelle à l'heure de
fin, sans toucher au booléen.
A la fermeture de l'application tu fais de même, mais en modifiant le
booléen.
Et à l'ouverture de la fenêtre, tu changes le booléen sans toucher l'heure
de fin.

A pire en cas de fermeture "violente", l'utilisateur "perd" les 10 dernières
minutes.

Frédéric.

"qualite69" a écrit dans le message de groupe de discussion :
2015605da15271cbc12549ef6ee4443821f0@news.pcsoft.fr...

Bonjour,

Merci pour votre réponse. Et je comprend parfaitement votre point de vue.
Mais le sujet ici n'est pas la logique applicative de mon logiciel mais
belle et bien le comportement d'une application Windev sur une demande de
fermeture de l'OS ("signal kill").

Ne pouvons nous pas considérer normal qu'un évènement "fin de programme"
soit appelé et traité par Windev?
Tant pis, nous sommes tous habitués à ce genre de situation et nous sommes
bien là pour discuter de contournements...

Alors voila: mon appli est un "time-trackeur". Il permet à l'opérateur
d'indiquer quelle tâche il en train de réaliser. L'heure de fin de la tâche
en cours est enregistré en base de données quand l'opérateur change de
tâche, ferme l'application ou ferme son PC...
C'est le dernier cas qui nous intéresse.
Avez-vous des propositions (hormis demander à l'opérateur de
systématiquement fermer l'application avant un reboot ou un shutown) ?

Merci d'avance à tous pour idées, bout de codes et autres.

Cordialement,
Py
Posté le 21 septembre 2015 - 14:25
Tant que tu code pour le cas ou le courant est coupé...

En plus de la solution proposée par Frédéric, que tu peux amener à la
minute facilement, il y avait dans le vieux temps (je parles de windev
5.5) un évènement qu'on pouvait intercepter avec "evenement" quand le
système demandait la fermeture, et auquel on pouvait même répondre NON.

Je le sais parce que je l'ai utilisé dans un soft de sauvegarde que
j'avais développé à l'époque (axlSauve, pour les anciens) pour empêcher
la fermeture quand une sauvegarde était en cours (sur option bien sur).

Maintenant, quel évènement, je ne sais plus, mais c'est relativement
facile à trouver en écrivant dans un fichier texte tous les évènements
qui arrivent à un programme de test.

Et est ce que ca fonctionne toujours de la même facon sur les windows
"moderne", la encore, ce n'est pas sur

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Disponible : WXShowroom.com, WXReplication (open source)
Bientôt : WXEDM (open source)
Plus d'information sur http://fabriceharari.com


On 9/21/2015 5:51 AM, qualite69 wrote:
Bonjour,

Merci pour votre réponse. Et je comprend parfaitement votre point de
vue. Mais le sujet ici n'est pas la logique applicative de mon logiciel
mais belle et bien le comportement d'une application Windev sur une
demande de fermeture de l'OS ("signal kill").

Ne pouvons nous pas considérer normal qu'un évènement "fin de programme"
soit appelé et traité par Windev?
Tant pis, nous sommes tous habitués à ce genre de situation et nous
sommes bien là pour discuter de contournements...

Alors voila: mon appli est un "time-trackeur". Il permet à l'opérateur
d'indiquer quelle tâche il en train de réaliser. L'heure de fin de la
tâche en cours est enregistré en base de données quand l'opérateur
change de tâche, ferme l'application ou ferme son PC...
C'est le dernier cas qui nous intéresse.
Avez-vous des propositions (hormis demander à l'opérateur de
systématiquement fermer l'application avant un reboot ou un shutown) ?

Merci d'avance à tous pour idées, bout de codes et autres.

Cordialement,
Py
Posté le 21 septembre 2015 - 15:16
PROCEDURE FinSession()
SELON _EVE.wMessage
CAS 17

SI pas ouinon(oui,"Voulez-vous quitter "+NomProgramme+" avant de quitter Windows ?") alors
_eve.retour=faux // On garde l'application active
sinon
_EVE.Retour=Vrai
FinProgramme()
FIN
FIN

Extrait d'une appli 5.5 encore utilisée chez de nombreux Clients
Marche sur XP, et tous les Windows Serveur.
Pour les autres OS, je ne sais pas.

Quelle mémoire ce Fabrice.
Membre enregistré
23 messages
Posté le 21 octobre 2015 - 08:40
Bonjour à tous,

Merci ce bout de code répond parfaitement à mon besoin (essentiellement la fermeture de session).