ArKaLiTy
Messages postés2Date d'inscriptionmardi 31 août 2004StatutMembreDernière intervention30 janvier 2008
-
30 janv. 2008 à 15:02
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
30 janv. 2008 à 17:47
Bonjour,
j'ai une petite procédure qui permet de détecter lorsque un programme défini est lancé.
Lorsqu'un checkbox est coché, la procédure surveille tous les processus en cours d'éxecution et les compare un à un via le contenu d'un editbox.
Le problème est que lorsque la boucle est éxecuté, mon application se gèle completement et je ne peux rien faire jusqu'a ce que l'application cible soit éxecuté.
Si quelqu'un sait comment faire pour que ma boucle ne bloque pas mon programme ... ^^
procedure TForm1.CheckBox1Click(Sender: TObject);
var
TheTarget: String;
SnapShot: Cardinal;
ProcessEntry: TProcessEntry32;
begin
if Checkbox1.Checked = False then exit;
repeat
//Création de "l'instantané"
SnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//En cas d'erreur on sort
If SnapShot = 0 then Exit;
ProcessEntry.dwSize := SizeOf(ProcessEntry);
//Lecture du premier processus de la liste
If Process32First(SnapShot, ProcessEntry) then
//Tant qu'il reste un processus, ajouter son nom à la liste
while Process32Next(SnapShot, ProcessEntry) do
begin
TheTarget := ProcessEntry.szExeFile; //On récupère dans la variable le nom d'un des processus en cours
if TheTarget = Edit1.Text then //Si ce processus est celui recherché, on entre dans la boucle
begin
Showmessage('Le processus ' + Edit1.Text + ' a été lancé.');
Checkbox1.Checked := False;
Exit;
end;
end;
//Libération de l'instantané
CloseHandle(SnapShot);
ArKaLiTy
Messages postés2Date d'inscriptionmardi 31 août 2004StatutMembreDernière intervention30 janvier 2008 30 janv. 2008 à 15:08
Oula, petit problèem d'édition ^^''''
J'espere que ce sera mieux cette fois :
( Reprise du message précedent )
Bonjour, j'ai une petite procédure qui permet de détecter lorsque un programme défini est lancé.
Lorsqu'un checkbox est coché, la procédure surveille tous les processus en cours d'éxecution et les compare un à un via le contenu d'un editbox.
Le problème est que lorsque la boucle est éxecuté, mon application se gèle completement et je ne peux rien faire jusqu'a ce que l'application cible soit éxecuté.
Si quelqu'un sait comment faire pour que ma boucle ne bloque pas mon programme ...
procedure TForm1.CheckBox1Click(Sender: TObject);
var
TheTarget: String;
SnapShot: Cardinal;
ProcessEntry: TProcessEntry32;
begin
if Checkbox1.Checked = False then exit;
repeat
//Création de "l'instantané"
SnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//En cas d'erreur on sort
If SnapShot = 0 then Exit;
ProcessEntry.dwSize := SizeOf(ProcessEntry);
//Lecture du premier processus de la liste
If Process32First(SnapShot, ProcessEntry) then
//Tant qu'il reste un processus, ajouter son nom à la liste
while Process32Next(SnapShot, ProcessEntry) do
begin
TheTarget := ProcessEntry.szExeFile; //On récupère dans la variable le nom d'un des processus en cours
if TheTarget = Edit1.Text then //Si ce processus est celui recherché, on entre dans la boucle
begin
Showmessage('Le processus ' + Edit1.Text + ' a été lancé.');
Checkbox1.Checked := False;
Exit;
end;
end;
//Libération de l'instantané
CloseHandle(SnapShot);