Admin Fondateur
Nombre de messages : 197 Age : 40 Localisation : Tlemcen ( Algérie ) Date d'inscription : 04/12/2006
| Sujet: Comment savoir si une application est en cours d'exécution ? Ven 12 Jan - 6:18 | |
| Pour retrouver le nom d'une application en cours d'exécution on utilisera la fonction CreateToolhelp32Snapshot qui renvoie la liste des process. Ensuite on parcourra cette liste en utilisant la fonction Process32Next qui renvoi les informations d'un process dans un enregistrement de type TProcessentry32: - Code:
-
[/center] tagPROCESSENTRY32 = packed record dwSize: DWORD; // taille de l'enregistrement cntUsage: DWORD; // Compteur de référence du process, si zéro le process se termine. th32ProcessID: DWORD; // Identifiant du process th32DefaultHeapID: DWORD; // Identifiant de la pile par défaut du process th32ModuleID: DWORD; // Identifiant du module du process cntThreads: DWORD; // Nombre de thread du process th32ParentProcessID: DWORD; // Identifiant du process parent ( 'son créateur' ) pcPriClassBase: Longint; // Priorité de base des threads crée par ce process dwFlags: DWORD; // Réservé szExeFile: array[0..MAX_PATH - 1] of Char; // le nom de l'exécutable. end;[center] Vous devez ajouter l'unité TLHelp32 dans la clause uses. - Code:
-
uses TLHelp32; - Code:
-
function ExeRunning(NomApplication : string; StopProcess:Boolean):Boolean; //Test si une application est en cours d'exécution // StopProcess indique si on termine l'application 'NomApplication'
// Code proposé par Thunder_nico
var ProcListExec : TProcessentry32; PrhListExec : Thandle; Continu : Boolean; isStarted : Boolean; HandleProcessCourant : Cardinal; PathProcessCourant : string; ProcessCourant :String;
begin // Liste des applications en cours d'exécution // Initialisation des variables et récuperation de la liste des process ProcListExec.dwSize:=sizeof(ProcListExec); Continu := True; isStarted := False;
Try // Récupére la liste des process en cours d'éxécution au moment de l'appel PrhListExec:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); if (PrhListExec <> INVALID_HANDLE_VALUE) then begin //On se place sur le premier process Process32First(PrhListExec,ProcListExec);
// Tant que le process recherché n'est pas trouvé et qu'il reste // des process dans la liste, on parcourt et analyse la liste while Continu do begin ProcessCourant := Uppercase(ExtractFileName(ProcListExec.szExeFile)); ProcessCourant := ChangeFileExt(ProcessCourant,''); isStarted := (ProcessCourant = Uppercase(NomApplication)); if isStarted then begin HandleProcessCourant := ProcListExec.th32ProcessID; PathProcessCourant := ExtractFilepath(ProcListExec.szExeFile); Continu := False; end else // Recherche le process suivant dans la liste Continu := Process32Next(PrhListExec,ProcListExec); end;
if StopProcess then if isStarted then begin // Termine le process en indiquant le code de sortie zéro TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,HandleProcessCourant),0); Sleep(500); // Laisse le temps au process en cours de suppression de s'arrêter end; end; Finally CloseHandle(PrhListExec); // Libére les ressources Result := isStarted; end; end; | |
|