IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Détecter des processus en cours [FAQ]


Sujet :

Lazarus Pascal

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 37
    Points : 27
    Points
    27
    Par défaut Détecter des processus en cours
    Bonjour,

    Je voudrai savoir comment m'y prendre pour connaitre les processus en cours sur la session (win), pour ensuite checker si tel ou tel processus est lancé, et au final griser tel ou tel bouton.


    Merci,

    Jeff

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si vous parlez de processus externes à l'application, à partir du code Lazarus, vous pourriez lancer la commande windows tasklist et récupérer le CR dans un memo...

    Cordialement. Gilles

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    Merci, pas bête comme idée, mais comment l'utiliser dans le code lazarus ?

    Après je voudrai prendre que les nom pour voir sur Blabla.exe tourne par exemple

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je vous transmets un bout de code en fin de PM. Je suis en train de me battre avec mes dépendances sous Linux... et pour l'instant je n'ai pas le dessus...

    Cordialement. Gilles

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    Merci bien Gilles.

    Bonne bataille ^^

  6. #6
    Invité
    Invité(e)
    Par défaut
    Voici le code. Il est issu d'un wiki Lazarus.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    procedure TForm1.FormCreate(Sender: TObject);  
    //Dans uses ajouter : process
    const
     READ_BYTES = 2048;
    var
     S: TStringList;
     M: TMemoryStream;
     P: TProcess;
     n: LongInt;
     BytesRead: LongInt;
     i: integer;
     sLine: string;
    begin
     M := TMemoryStream.Create;
     BytesRead := 0;
     P := TProcess.Create(nil);
     // CommandLine différente selon l'OS
     {$IFDEF WINDOWS}
      P.CommandLine := 'tasklist';
     {$ELSE}
      //Pour Linux et MAC OS X
      // P.CommandLine := '???';
     {$ENDIF}
     P.ShowWindow:= swoHIDE;
     P.Options := [poUsePipes];
     P.Execute;
     while P.Running do begin
      M.SetSize(BytesRead + READ_BYTES);
      n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
      if n > 0 then begin
       Inc(BytesRead, n);
      end else
       Sleep(100);
     end;
     repeat
      M.SetSize(BytesRead + READ_BYTES);
      n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
      if n > 0  then begin
       Inc(BytesRead, n);
      end;
     until n <= 0;
     M.SetSize(BytesRead);
     S := TStringList.Create;
     S.LoadFromStream(M);
     //Eventuellement ajouter un Memo sur la Form pour voir le résultat
     //Memo1.Clear;
     //Memo1.Lines.AddStrings(S);
     if S.count>0 then begin
      for i:=0 to S.count -1 do begin
       sLine:=trim(S[i]);
       //Traiter chaque sLine ici pour récupérer le nom.exe contenu
       //Voir petite RegEx ci-dessous
      end;
     end;
     S.Free;
     P.Free;
     M.Free;
    end;
    Cordialement. Gilles
    Dernière modification par Invité ; 11/06/2010 à 11h50. Motif: Actualisation

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Petite RegEx en Lazarus pour chercher les xxx.exe dans chaque ligne de la StringList :
    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
    function fsRegExExe(sRegex:string):string;
    //Uses RegExpr;
    //Objet : Renvoyer sous-chaine 'xxxxx.exe ' contenue dans sRegEx
    //Rq : Non généralisable : TRegExpr ne gère pas les {} entre autres...
    var
      r: TRegExprEngine;
      index,len,i: integer;
    begin
     result:= '';
     r := GenerateRegExprEngine('[\w\d\-\.]+\.exe ',[ref_singleline]);
     //Espace indispensable derrière .exe sinon chaine a.exej serait renvoyée
     if not (RegExprPos(r,pchar(' '+sRegEx+' '), index, len)) then begin
        //Petit bug : Si la chaine commence directement par un.exe, il est
        //non détecté --> On place un espace devant la chaine...
        //Par contre espace normal après la chaine : on recherche '.exe '
        //donc si sRegEx se termine par 'xxxx.exe', il ne serait pas détecté
        DestroyregExprEngine(r);
        exit;
     end;
     DestroyregExprEngine(r);
     if (index < 1) or (len < 5) then exit;
     for i:=index to index+len-2 do   //-2 car -1 plus le blanc derrière .exe
        result:=result+sRegex[i];
     result:=trim(result); //Normalement inutile
    end;
    Bonne journée. Gilles
    Dernière modification par Invité ; 11/06/2010 à 11h51.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/07/2010, 18h56
  2. .NET CF Liste des processus en cours
    Par cerede2000 dans le forum VB.NET
    Réponses: 4
    Dernier message: 20/12/2009, 17h21
  3. Détecter un processus en cours
    Par calenfeaion dans le forum Général Python
    Réponses: 5
    Dernier message: 31/07/2007, 16h37
  4. Réponses: 1
    Dernier message: 21/07/2006, 18h43
  5. Réponses: 2
    Dernier message: 04/10/2002, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo