var hdlEvent : THandle; //handle de l'évènement qui provoque les fermetures. hdlThread : THandle; //handle du Thread qui attendra l'événement 'hdlEvent'. procedure ToutFermer(HWnd: THandle); stdcall; {Procedure du Thread qui attend l'évènement de fermeture.} begin WaitForSingleObject(hdlEvent,INFINITE);//attend le déclenchement de l'événement 'OnFerme'.. PostMessage(HWnd,WM_QUIT,0,0); //..et indique à l'application ce qu'elle doit faire. end; procedure TForm1.FormCreate(Sender: TObject); var id : Cardinal; begin hdlEvent:= CreateEvent(nil,True,False,'OnFerme'); //On crée l'événement... if hdlEvent<>0 then hdlThread:=CreateThread(nil,1,@ToutFermer,pointer(Handle),0,id); //...et mise en attente de l'événement ds un Thread. end; procedure TForm1.btnToutFermerClick(Sender: TObject); {Ferme tous les process en cours.} begin PulseEvent(hdlEvent);//déclenche l'événement de fermeture et le désarme aussitôt. end; procedure TForm1.btnQuitterClick(Sender: TObject); {Ne ferme que le process de cette application.} begin Application.Terminate; end; procedure TForm1.FormDestroy(Sender: TObject); begin if hdlEvent <> 0 then CloseHandle(hdlEvent); if hdlThread <> 0 then CloseHandle(hdlThread); end;