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 :

Fermeture Windows impossible


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut Fermeture Windows impossible
    Bonjours, je viens de developper un programme en Delphi, qui tourne en tache de fond. Par contre des que je le ance, je n'arrive plus a fermer windows ou meme le redémmarrer.
    Quelqu'un aurait une idée d'ou peut provenir le probléme?
    Merci

  2. #2
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    il fait quoi ton programme ?

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut
    Beh en fait il detecte si une clé USB est branchée il lit des information dessus vérifie l'identité de la clé !
    Puis lorsqu'on la debranche il fait la meme chose sauf qu'il remet tout a zéro. Mais il doit pas tout remettre correctement.
    lol
    C'est une sorte de DongleUSB.
    Enfin je vois pas d'ou sa vient.
    Si quelqu'un a une idée!
    Merci

  4. #4
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 338
    Points : 383
    Points
    383
    Par défaut
    bonsoir

    met un bout de code!!

    à plus

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    Salut,

    Tu dois intercepter le message WM_ENDSESSION qui permet de détecter l'arrêt d'une session Windows, donc sa fermeture. Tu dois le faire de la façon suivante :

    Mets cette procédure au dessus de clause private :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
    Place une variable booléenne globale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var bTerminated : boolean;
    Ensuite écris ton code pour la procédure WMQueryEndSession :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
    begin
    inherited;
    bTerminated := True;
    end;
    Et dans ta fonction Close :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if bTeminated then
    Application.terminate;
    Voilà,

    A plus,

    Chris

  6. #6
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut
    Merci pour la réponse,je test ca tout de suite.

  7. #7
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut
    Je viens de tester mais rien ne change voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    TFormUSB = class(TForm)
        ProgressBar1: TProgressBar;
        Label1: TLabel;
        Timer1: TTimer;
        procedure FormDestroy(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
        procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
        procedure EndSession(var Msg: TMessage); message WM_ENDSESSION;
      protected
        { Déclarations protégées }
       procedure WndProc(var Msg: TMessage); override;
      private
       { Déclarations privées }
       MsgID_QueryCancelAutoPlay: Integer;
       procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
     
      end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TFormUSB.WMQueryEndSession(var Message: TWMQueryEndSession);
    begin
      bTerminated := True;
      AutoRun:= FALSE;
      //Ici tes actions à faire
      GetRegistryValueStr('\Software\Intelys', 'serial', '', True, False);
      GetRegistryValueStr('\Software\Intelys', 'client','', True, False);
      GetRegistryValueStr('\Software\Intelys', 'user', '', True, False);
      GetRegistryValueStr('\Software\Intelys', 'plug', '0', True, False);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TFormUSB.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     
      if bTerminated then
        Application.terminate;
     
      GetRegistryValueStr('\Software\Intelys', 'serial', '', True, False);
      GetRegistryValueStr('\Software\Intelys', 'client','', True, False);
      GetRegistryValueStr('\Software\Intelys', 'user', '', True, False);
      GetRegistryValueStr('\Software\Intelys', 'plug', '0', True, False);
    end;
    Est ce que quelqu'un vois ou pourrait se trouver mon erreur?
    Merci

  8. #8
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut
    J'ai oublier de préciser, mon application tourne en tache de fond,en tant que processus.

  9. #9
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut
    Encore un bout de code, la déclaration de mes variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var
      FormUSB: TFormUSB;
      bTerminated : boolean;
      AutoRun: Boolean;
      hFile,FenetreIE: THandle;
      applicationName,User,Client:string;
      HttpPost1,HttpPost2: THttpPost;
      VolSerial: Int64	;
      GetLettre: string;
      VolName, FileSysName : Array[0..Max_Path]Of Char;
      FileMaxLen, FileFlags : DWord;
      Stream: TFileStream;

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    Salut,

    Enlève la procédure permettant d'intercepter le message WM_ENDSESSION, pour voir... Peut-être qu'il y a un conflit...

    A plus,

    Christopher

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    Re,

    Et surtout essaye de placer la déclaration de ta procedure en dessous de celle de WMDeviceChange, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
    procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
    Je pense que ça devrait fonctionner...

    A plus,

    Chris

  12. #12
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut
    Juste un truc...

    Si Windows ne se ferme pas, c'est parce que ton processus ne se termine pas ? ( en gros il reste dans la liste des processus )
    Ou c'est autre chose ?

    En tout cas dans le code proposé par lapec_et_cie je ne comprends pas pourquoi faire un test dans le OnClose, alors que si le processus bloque la fermeture, c'est que lui même ne passe pas dans le OnClose.
    En gros le Application.Terminate devrai plutot se trouvé dans le EndSession. Non ?

Discussions similaires

  1. reinstallation de windows impossible
    Par manu49 dans le forum Ordinateurs
    Réponses: 15
    Dernier message: 27/09/2006, 21h10
  2. Redimensionnement de la partition Windows impossible
    Par lionel77 dans le forum Mandriva / Mageia
    Réponses: 1
    Dernier message: 20/07/2006, 15h42
  3. [Windows]Impossible d'ouvrir le volet "Rechercher"
    Par DecoY dans le forum Windows XP
    Réponses: 1
    Dernier message: 30/12/2005, 19h56
  4. Pb Firefox + pb fermeture Windows non voulue
    Par trotters213 dans le forum Firefox
    Réponses: 9
    Dernier message: 13/06/2005, 16h16
  5. [XP]Empecher fermeture windows
    Par willowII dans le forum Windows
    Réponses: 7
    Dernier message: 14/11/2004, 20h40

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