Savoir si une application est lancé [Résolu]

Messages postés
297
Date d'inscription
dimanche 14 mars 2004
Dernière intervention
18 décembre 2014
- - Dernière réponse : Oniria
Messages postés
297
Date d'inscription
dimanche 14 mars 2004
Dernière intervention
18 décembre 2014
- 28 juil. 2008 à 11:21
Bonjour,

J'aimerais par mon application si une application particulière est lancé. J'ai cherché sur internet et j'ai obtenu un bout de code utilisant l'unite TlHelp32. Or sous lazarus, je n'ai pas cette unité.

J'ai essayé aussi avec la procedure FindWindows, mais mon application ne voie pas celle que je veux.

 J'ai ensuite cherché sur delphifr et j'ai trouvé le code du
http://www.delphifr.com/codes/LISTEUR-PROCESSUS-CHILDS-KILL-IMPORTE-QUEL-PROCESS-PRIVILEGE_32493.aspx.

Mais j'avoue, je ne comprend pas ce qui permet de lister les processus. J'ai compris que c'était un thread qui le faisait mais comment fait-elle pour lister ???? Là, je ne comprend pas.

Merci pour vos réponses.

Oniria
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
3
Merci
Salut,



C'est grâce à l'API "EnumProcess", non?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 97 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Caribensila
Messages postés
297
Date d'inscription
dimanche 14 mars 2004
Dernière intervention
18 décembre 2014
0
Merci
Merci pour ta réponse CariBensila. C'est bien cette procedure que l'on peut obtenir la liste des processus. Par contre, on n'a pas le nom de l'application executé (par exemple outlook.exe, on obtient Microsoft Outlook) mais c'est mieux que rien

Pour le gens que ca intérresse le code qui me liste tous mes processus est le suivant :

unit main;

{$mode delphi}
interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,Windows,
  Buttons, StdCtrls;

type

  { TFMain }

  TFMain = class(TForm)
    B_Quitter: TBitBtn;
    B_Dictionnaire: TBitBtn;
    B_Parametre: TBitBtn;
    Memo1: TMemo;
    procedure B_ParametreClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    Liste_Processus : TStringList;
  end;

var
  FMain: TFMain;

implementation

{ TFMain }

// ce code vient de http://delphi.about.com/od/windowsshellapi/l/aa080304a.htm
function EnumProcess(hHwnd: HWND; lParam : integer): boolean; stdcall;
var
  pPid : DWORD;
  title, ClassName : string;
  texte : string;
begin
  //if the returned value in null the
  //callback has failed, so set to false and exit.
  if (hHwnd=NULL) then
  //if (_para1=NULL) then
  begin
    result := false;
  end
  else
  begin
    //additional functions to get more
    //information about a process.
    //get the Process Identification number.
    GetWindowThreadProcessId(hHwnd,pPid);
    //set a memory area to receive
    //the process class name
    SetLength(ClassName, 255);
    //get the class name and reset the
    //memory area to the size of the name
    SetLength(ClassName,GetClassName(hHwnd,PChar(className),Length(className)));
    SetLength(title, 255);
    //get the process title; usually displayed
    //on the top bar in visible process
    SetLength(title, GetWindowText(hHwnd, PChar(title), Length(title)));
    //Display the process information
    //by adding it to a list box    texte :'Class Name ' + className +
       '; Title = ' + title +
       '; HWND = ' +IntToStr(hHwnd) +
       '; Pid = ' + IntToStr(pPid);
    FMain.Liste_Processus.Add(texte);

    Result := true;
  end;
end;

procedure TFMain.FormCreate(Sender: TObject);
var i:integer;
begin
  FMain.Liste_Processus:=TStringList.Create;

   
end;

procedure TFMain.B_ParametreClick(Sender: TObject);
var i : integer;
begin
  FMain.Liste_Processus.Clear;
  if EnumWindows(@EnumProcess,0) = false
     then ShowMessage('Erreur: Impossible de récupérer les informations des processus.');
  FMain.Memo1.Lines.Add('Nb processus actifs ='+inttostr(FMain.Liste_Processus.Count));
  for i:=0 to FMain.Liste_Processus.Count-1 do
    begin
      FMain.Memo1.Lines.Add(FMain.Liste_Processus.Strings[i])
    end;
end;

procedure TFMain.FormDestroy(Sender: TObject);
begin
  FMain.Liste_Processus.Free; // on libére le stringlist contenant les infos des processus
end;

initialization
  {$I main.lrs}

end.            

En tout cas merci Caribensila, ta réponse ma bien aiguillé.

Oniria
Commenter la réponse de Oniria

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.