flo160fr
Messages postés157Date d'inscriptiondimanche 19 novembre 2000StatutMembreDernière intervention14 avril 2009
-
5 août 2006 à 14:16
flo160fr
Messages postés157Date d'inscriptiondimanche 19 novembre 2000StatutMembreDernière intervention14 avril 2009
-
6 août 2006 à 11:41
Bonjour !
Je voudrais savoir :
Comment savoir si un processus est en cours d'execution (avec le nom de l'executable si possible) Comment obtenir le handle de sa fenetre principale (si il est en cours d'execution)
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 5 août 2006 à 15:30
Voila un extrait de l'un de mes programmes. Ces fonctions ont été crée à partir de celles données sur Developpez.com:
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;
procedure TForm1.ListerLesProcessus(Sender: TObject);
var
ProcListExec : TProcessentry32;
PrhListExec : Thandle;
Continu : Boolean;
ProcessCourant :String;
begin
CheckListBox1.Clear;
ProcListExec.dwSize:=sizeof(ProcListExec);
Continu := True;
Try
PrhListExec:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
if (PrhListExec <> INVALID_HANDLE_VALUE)
then
begin
Process32First(PrhListExec,ProcListExec);
while Continu do
begin
ProcessCourant := Uppercase(ExtractFileName(ProcListExec.szExeFile));
ProcessCourant := ChangeFileExt(ProcessCourant,'');
CheckListBox1.AddItem(ProcessCourant,nil);
Continu := Process32Next(PrhListExec,ProcListExec);
end;
end;
Finally
CloseHandle(PrhListExec);
end;
end;
Si tu regarde bien, cela permet de lister les processus. Donc pour savoir s'il un programme est en cours d'execution fait la liste de tout les programmes en cours et regarde si ton programme est dedans. Pour avoir le Handle, regarde la 2eme procedure c'est dedans.