NEO ::: TEAM
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

NEO ::: TEAM

New Evolution Owner
 
AccueilRechercherDernières imagesS'enregistrerConnexion
Le Deal du moment : -26%
369€ PC Portable HP 15-fd0064nf – ...
Voir le deal
369.99 €

 

 Comment tuer un processus à partir de son nom ?

Aller en bas 
AuteurMessage
Admin
Fondateur
Fondateur
Admin


Nombre de messages : 197
Age : 40
Localisation : Tlemcen ( Algérie )
Date d'inscription : 04/12/2006

Comment tuer un processus à partir de son nom ? Empty
MessageSujet: Comment tuer un processus à partir de son nom ?   Comment tuer un processus à partir de son nom ? Icon_minitimeVen 12 Jan - 6:24

Il est tout à fait possible de tuer un processus directement à partir de son nom de fichier exécutable (par exemple notepad.exe). Pour cela, il suffit d'utiliser cette procédure (il faut rajouter les unités Windows, SysUtils et TlHelp32 à la clause uses) :
Code:

function KillProcess(const ProcessName : string) : boolean;
var ProcessEntry32 : TProcessEntry32;
    HSnapShot : THandle;
    HProcess : THandle;
begin
  Result := False;

  HSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if HSnapShot = 0 then exit;

  ProcessEntry32.dwSize := sizeof(ProcessEntry32);
  if Process32First(HSnapShot, ProcessEntry32) then
  repeat
    if CompareText(ProcessEntry32.szExeFile, ProcessName) = 0 then
    begin
      HProcess := OpenProcess(PROCESS_TERMINATE, False, ProcessEntry32.th32ProcessID);
      if HProcess <> 0 then
      begin
        Result := TerminateProcess(HProcess, 0);
        CloseHandle(HProcess);
      end;
      Break;
    end;
  until not Process32Next(HSnapShot, ProcessEntry32);

  CloseHandle(HSnapshot);
end;

Cette fonction renvoie True si elle a réussi, et False dans le cas contraire.

Tout d'abord, on appelle l'API CreateToolhelp32Snapshot pour dresser une liste des processus. Le paramètre TH32CS_SNAPPROCESS indique qu'il faut récupérer tous les processus. Le second paramètre 0 est ignoré : il est utilisé avec d'autres valeurs du premier paramètre. Le handle ainsi renvoyé pourra être passé aux routines Process32First et Process32Next. Ensuite, il faudra le libérer avec CloseHandle.
Puis, au moyen de Process32First et Process32Next, on énumère tous les processus du snapshot en plaçant leurs informations dans la variable ProcessEntry32.
Pour chaque processus, on teste son nom (nom du fichier exécutable) : s'il est identique, à la casse près, au paramètre ProcessName, alors il faut le tuer. Pour ce faire, on ouvre un handle de processus avec les droits de terminaison (PROCESS_TERMINATE). On passe ce handle à la routine TerminateProcess pour tuer le processus.
Ensuite, on le libère avec CloseHandle.

Cette version de la routine ne termine que le premier processus dont le nom est passé en paramètre. Une variante peut être écrite pour tuer tous les processus portant ce nom. Il suffit de modifier un peu le contenu de la boucle, en supprimant le Break et en s'assurant que Result n'est pas remis à False après avoir déjà tué un processus mais ne pas avoir pu tuer un autre. Dans ce cas, la fonction retourne True si elle a tué au moins un processus.
Code:

HProcess := OpenProcess(PROCESS_TERMINATE, False, ProcessEntry32.th32ProcessID);
if HProcess <> 0 then
begin
  Result := TerminateProcess(HProcess, 0) or Result;
  CloseHandle(HProcess);
end;


Attention ! Il est impératif de placer le or Result après l'appel à TerminateProcess, sinon l'optimisation de l'évaluation des or va éviter l'appel à TerminateProcess !
La version dans le zip accepte un paramètre All de type boolean indiquant s'il faut tuer tous les processus trouvés ou seulement le premier.
Revenir en haut Aller en bas
https://neo-team.forumactif.com
 
Comment tuer un processus à partir de son nom ?
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment cacher les scrollbars ?
» Comment changer la couleur d'un TProgressBar ?
» Comment copier un fichier ?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
NEO ::: TEAM :: Informatique :: Les RADs :: Borland Delphi 4,5,6,7-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser