Bonjour,

Déjà désolé si je ne suis pas sur la bonne rubrique du forum, je ne savais pas vraiment ou placer cette requête. Mais comme il s'agit d'une fonction de l'API Windows je me suis permis de mettre ce post ici.

Nous utilisons actuellement sur notre logiciel un bout de code permettant de créer une liste des processus afin de contrôler si un programme est ouvert ou non. Pour créer la liste nous utilisons la fonction windows CreateToolhelp32Snapshot. Le problème apparaît pour les clients étant sur Terminal Server. En effet cette fonction a l'air d'afficher les processus de toutes les sessions Terminal.

Le but final étant que j'aie une liste uniquement des processus ouverts par la session en question (Affichage standard lorsque l'utilisateur accède à son gestionnaire de tâche d'ailleurs). Je n'ai malheureusement rien trouvé sur le net, pourriez-vous m’aiguiller si il est possible de le faire via cette fonction ou faut-il chercher une autre logique que notre code actuel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Function ExeRunning (NomApplication : Ansistring) : Cardinal;
 
Var
   ProcListExec : TProcessentry32;
   PrhListExec : Thandle;
   Flag : boolean;
 
begin
     Result:=0;
     ProcListExec.dwSize:=sizeof(ProcListExec);
     try
        PrhListExec:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
        if (PrhListExec <> INVALID_HANDLE_VALUE) then
        begin
             Flag:=True;
             Process32First(PrhListExec,ProcListExec);
             while Flag = True do
             begin
                  if (Uppercase(ExtractFileName(ProcListExec.szExeFile)) = Uppercase(ExtractFileName (NomApplication))) then
                  begin
                       Result:=ProcListExec.th32ProcessID;
                       Flag:=False;
                  end
                  else
                  Flag:=Process32Next(PrhListExec,ProcListExec);
             end;
        end;
     finally
            CloseHandle(PrhListExec);
     end;
end;