Fermer simultanément tous les processus d'une même application

Contenu du snippet

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;



Compatibilité : Delphi 5

A voir également