IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Detecter la fermeture de session de Windows


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut Detecter la fermeture de session de Windows
    Bonjour,

    Je cherche à trouver la bonne méthode pour intercepter le message Windows de fermerture de session, ou d'arret et redemarrage de Windows.

    En effet, j'ai un programme qui ce lance a chaque ouverture de session, il est masqué. Il doit se lancer lors du processus de fermeture de Windows. A ce moment la, il fait un traitement, et ensuite doit continuer le processus de fermerture.

    Selon l'utilisation de WM_ENDSESSION, et de WM_QUERYENDSESSION, j'arrive a lancer ma procédure à la détection de la fermeture de session, mais quand mon programme termine son traitement, le processus de fermeture de Windows est annulé, ou alors mon programme détecte le message, commence le traitement et là Windows détruit l'instance de mon programme sans que le traitement soit terminé (avec la fenêtre Fin du programme.... terminer maintenant), et ferme la session ou éteint windows.

    Voila, voila, je ne sais pas trop si je suis clair...

    Je n'arrive pas a trouver le bon compromis.

    En gros j'aimerais que mon programme fasse cela:

    Requête de fermeture/Arrêt de windows => mon programme le détecte, et lance le traitement => A la fin du traitement on continu la requête de fermeture/ou d'arrêt..

    Je compte sur vous, car là je ne trouve pas... Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 49
    Par défaut
    Bonjour,

    la gestion de la fermeture de windows pour une application qui doit effectuer un traitement est toujours délicat car Windows "thread" tous ses "process".
    Par exemple, une appli réseau verra tantôt ses ports fermés avant d'être tuée par Windows, tantôt après.
    L'un des moyen de résoudre le pb est, après la détection du message de shutdown, d'augmenter de manière critique la priority class et la priority thread de ton appli de façon a effectuer quand même ton traitement.
    c'est un peu bourrin, mais ça paye...

  3. #3
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut

    Citation Envoyé par MedGIR
    En gros j'aimerais que mon programme fasse cela:

    Requête de fermeture/Arrêt de windows => mon programme le détecte, et lance le traitement => A la fin du traitement on continu la requête de fermeture/ou d'arrêt..
    une piste de solution :
    détection de la fermeture de session par l'application (message WM_QUERYENDSESSION)
    annulation de la fermeture de session (retourner FALSE dans le traitement du message WM_QUERYENDSESSION)
    lancement du traitement
    fin du traitement
    fermeture manuelle de l'application (Application.Terminate, Close ...)
    relance de la fermeture de session (voir l'API ExitWindowsEx)

    pour les 2 derniers points voir si lequel vient avant l'autre.

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Tu peux aussi t'inspirer de la :
    http://delphi.developpez.com/faq/?pa...verturesession
    C'est pour l'ouverture d'une session mais tu peux peut-être trouver à partir de ça
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut
    Merci beaucoup de votre aide... mais justement j'ai déja fais cela... Mon probleme est de savoir quel était la requete de fermeture (Fermeture de session, arret de windows, ou redemarrage) pour pourvoir ré-injecter la fonction exitwindows.

    fermeture manuelle de l'application (Application.Terminate, Close ...)
    relance de la fermeture de session (voir l'API ExitWindowsEx)
    En gros, j'intercepte les evenements WM_QUERYENDSESSION et WM_ENDSESSION, mon traitement ce passe bien... mais je ne sais pas quelle instruction je dois mettre dans la fonction exitwindows... Sinon, meme quand je demande un arret de windows, mon programme se lance...et ferme la session, mais n'arrete pas Windows..

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut A l'aide....
    Je vous demande encore de l'aide, car je tourne en rond et ça commence à me gonfler....

    J'arrive à intercepter l'evenement de fermeture de windows, faire mon traitement, mais pas de récuperer le type de d'evenement de fermerture.

    Je m'explique je ne sais pas si c'est une fermeture de session, un arret de la machine, ou un restart.... voir une mise en hibernation...

    J'ai pourtant besoin de cette info, pour pourvoir soumettre à la fonction ExitWindows le bon paramètre... histoire que la fermeture de session continue sans que l'utilisateur ne s'en rende compte.

  7. #7
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut
    Citation Envoyé par MedGIR
    J'arrive à intercepter l'evenement de fermeture de windows, faire mon traitement, mais pas de récuperer le type de d'evenement de fermerture.
    Je m'explique je ne sais pas si c'est une fermeture de session, un arret de la machine, ou un restart.... voir une mise en hibernation...
    lorsque tu reçois le message WM_QUERYENDSESSION, le paramètre lParam t'indique s'il s'agit d'une fermeture de session ou de l'arrêt/redémarrage de la machine. cf API win$
    pour ce que j'en sais, le message ne t'indique pas s'il s'agit d'une mise en hibernation.

Discussions similaires

  1. "ne repond plus" windows fermeture de session
    Par got2boll dans le forum Windows XP
    Réponses: 1
    Dernier message: 25/05/2009, 18h18
  2. Fermeture de session windows et Container MDI
    Par tilb dans le forum Windows Forms
    Réponses: 7
    Dernier message: 02/10/2008, 18h55
  3. detecter la fermeture de windows
    Par WELCOMSMAIL dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 04/10/2007, 16h15
  4. Réponses: 8
    Dernier message: 21/06/2006, 15h43
  5. Réponses: 7
    Dernier message: 12/10/2005, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo