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

Langage Perl Discussion :

Fermer une application Windows


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Fermer une application Windows
    Hello...


    Je cherche un moyen en Perl de faire ceci :
    http://<br /> http://www.developpez...3a3d7c9b<br />
    Au cas ou le lien ne fonctionne pas :
    Un programme perl capable de fermer une application windows.


    J'avais penser a un truc du genre :

    L'execution du programme la premiere fois :
    - lance l'application
    - Récupère le PID
    - Le stocke dans un fichier

    L'execution du programme la deuxieme fois :
    - Lit et supprime le fichier
    - Recupere le PID
    - Ferme l'application

    etc..

    Y'a t'il une librairie capable de gérer ca ?
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
    Mireille Sitbon

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Bonjour,

    sur des machines NT/2000, tu peux employer les PsTools. Ce sont des utilitaires MsDos forts pratiques (http://www.sysinternals.com) qui émulent les commandes top, ps, kill (entre autres) bien connues sous Unix.

    Via l'un de ces utilitaires (Pslist.exe de mémoire), tu peux récupérer les PID de tous les programmes chargés en mémoire. Via un autre utilitaire (Pskill.exe), tu peux les flinguer de la même manière que si tu passais par le gestionnaire de tâches de 2000.

    Autrement formulé, ton programme pourrait fort bien lancer Pslist pour récupérer le PID du programme que tu veux stopper et lancer Pskill pour y parvenir.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Merci, ça fonctionne d'enfer !!!!
    En plus on a pas besoin du PID, pskill ferme l'application avec son nom.


    Encore un Grand MERCI !!!

    Ce post n'a plus rien a faire dans le perl
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
    Mireille Sitbon

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Février 2003
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    salut telecnop

    Comment faire pour developper une tel fonctionnement comment en batch peut on faire ce que tu ecrit :

    J'avais penser a un truc du genre :

    L'execution du programme la premiere fois :
    - lance l'application
    - Récupère le PID
    - Le stocke dans un fichier

    L'execution du programme la deuxieme fois :
    - Lit et supprime le fichier
    - Recupere le PID
    - Ferme l'application

    etc..

    Je ne suis pas un developpeur, mais si tu peux me donner des tuyaux

    merci

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par telecnop
    Merci, ça fonctionne d'enfer !!!!
    En plus on a pas besoin du PID, pskill ferme l'application avec son nom.

    Encore un Grand MERCI !!!

    Ce post n'a plus rien a faire dans le perl
    Tu peux toujours lancer pskill via un script Perl et contrôler que le prog a bien été fermé.

    Perl peut toujours servir à quelque chose

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 50
    Points : 54
    Points
    54
    Par défaut
    J'ai essayé d'utiliser pslist, mais celà me renvoi l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PsList 1.26 - Process Information Lister Copyright (C) 1999-2004 Mark 
    Russinovich Sysinternals - www.sysinternals.com Processor performance 
    object not found on PC1036 Run Exctrlst from the Windows Resource Kit to 
    repair the performance counters.
    mon code d'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $sortie = qx(PsTools/pslist.exe);

    Quelqu'un a une idée ?

  7. #7
    Membre actif Avatar de scaleo
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 327
    Points : 219
    Points
    219
    Par défaut
    Ou est l'interet d'utiliser des programmes externe pour killer une application sous windows et pour récupérer sont PID ?

    si tu veut récupérer la liste des applications en route sous Windows il suffit de lancer la commande , pour ce qui est de tuer une application par sont pid c'est tout aussi simple Je n'arrive pas comprendre cette manie de toujours chercher des applications émulant unix alors que les meme commandes son dispo sous windows mais sous un autre nom c'est tout . Génération DOS powered

    voila
    Vista powaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ::

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 50
    Points : 54
    Points
    54
    Par défaut
    En effet je connaissais pas.
    Le problème est que cette commande n'est pas disponible sur tous les windows.

    De plus, j'ai le meme problème, je n'arrive à a récupérer correctement la sortie dans mon script perl... j'ai une erreur d'execution du prog, qui retourne une erreur

  9. #9
    Membre actif Avatar de scaleo
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 327
    Points : 219
    Points
    219
    Par défaut
    Pour ceux qui ne connaisse pas voici la liste des options de taskkill


    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
    59
    60
    61
    62
    63
    64
    65
    66
    TASKKILL [/S systŠme] [/U utilisateur [/P mot_de_passe]]]
             { [/FI filtre] [/PID ID_processus | /IM image] } [/F] [/T]
     
    Description :
        Cet outil de ligne de commande peut ˆtre utilis‚ pour mettre fin … une ou plusieurs tƒches ou processus.
        Les processus peuvent ˆtre supprim‚s par l'id de processus ou le nom de l'image.
     
    Liste des paramŠtres :
       /S    systŠme         Sp‚cifie le systŠme distant auquel se connecter.
     
        /U    [domaine\]utilisateur  Sp‚cifie le contexte utilisateur sous lequel
                               la commande doit s'ex‚cuter.
     
       /P      [mot_de_passe]    Sp‚cifie le mot de passe pour le
                               contexte utilisateur donn‚. Il est demand‚ s'il est omis de la ligne de commande.
     
        /F                           Force la fin d'ex‚cution
                                        du ou des processus.
     
       /FI     filtre          Affiche un ensemble de tƒches qui correspond
                               au critŠre sp‚cifi‚ par le filtre.
     
        /PID     ID_processus       Sp‚cifie la valeur PID du processus qui
                                        doit ˆtre arrˆt‚.
     
        /IM     image          Sp‚cifie le nom d'image du processus
                                        qui doit ˆtre arrˆt‚. Le caractŠre g‚n‚rique '*'
                                        permet de sp‚cifier tous les noms d'images.
     
        /T                  Terminer l'arborescence : arrˆte le processus sp‚cifi‚
                               et tous les processus enfant qu'il a d‚marr‚s.
     
        /?                    Affiche cet ‚cran d'aide.
     
     
    Filtres :
        Nom du filtre   Op‚rateurs valides          Valeurs valides
        -------------   ------------------          -------------------
        STATUS          eq, ne                      RUNNING | NOT RESPONDING
        IMAGENAME       eq, ne                      Nom d'image
        PID             eq, ne, gt, lt, ge, le      Valeur PID
        SESSION         eq, ne, gt, lt, ge, le      Num‚ro de session
        CPUTIME         eq, ne, gt, lt, ge, le      Heure valide au format
                                                    hh:mm:ss.
                                                    hh - heures,
                                                    mm - minutes, ss - secondes
        MEMUSAGE        eq, ne, gt, lt, ge, le      M‚moire utilis‚e, en Ko
        USERNAME        eq, ne                      Nom d'utilisateur [domaine\]utilisateur
                                                    est le format utilis‚
        MODULES         eq, ne                      Nom de DLL
        SERVICES        eq, ne                      Nom de service
        WINDOWTITLE     eq, ne                      Titre de la fenˆtre
     
    Remarque : le caractŠre g‚n‚rique '*' n'est accept‚ qu'avec les filtres.
     
    Remarque : l'arrˆt des processus distants sera toujours forc‚,
          que l'option /F soit utilis‚e ou non.
     
    Exemplesÿ:
        TASKKILL /S systŠme /F /IM notepad.exe /T
        TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
        TASKKILL /F /IM notepad.exe /IM mspaint.exe
        TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne sans*"
        TASKKILL /F /FI "USERNAME eq AUTORITE NT\SYSTEM" /IM notepad.exe
        TASKKILL /S systŠme /U domaine\utilisateur /FI "USERNAME ne NT*" /IM *
        TASKKILL /S systŠme /U utilisateur /P mot_de_passe /FI "IMAGENAME eq note*"
    Peut tu poster l'erreur que renvoie perl
    Vista powaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ::

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 50
    Points : 54
    Points
    54
    Par défaut
    Mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/perl -w
     
    use strict;
    use CGI qw(:all);
     
    print "Content-type: text/html\n\n";
    print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
     
    #open(STDOUT, ">stdout.log" ) or die "cannot redirect stdout output in log file : $!\n";
    open(STDERR, ">stderr.log" ) or die "cannot redirect stderr output in log file : $!\n"; 
     
    my $sortie = system(tasklist);
     
    print "$sortie";

    ce qu'il affiche :
    STDOUT : STDERR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Can't spawn "cmd.exe": No such file or directory at C:\Inetpub\Scripts\shell.pl line 12.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 50
    Points : 54
    Points
    54
    Par défaut execution de pslist.exe
    Je voudrais récupérer la liste des processus windows depusi un script perl.
    Je voulais utiliser pslist.exe de cette maniere :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $sortie = system (pslist);
    malheureusement je n'obtiens qu'un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Processor performance object not found on PC1036 Run Exctrlst from the
    Windows Resource Kit to repair the performance counters.
    L'exécution a donc bien lieu, mais bloque au moment d'acceder à la liste des processus.

    Quelqu'un aurait-il une solution, ou une autre méthode ?

    Mon but est d'avoir la liste des processus, et par la suite pouvoir en tuer (par rapport à l'ID par exemple)

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Essaie sa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/usr/bin/perl -w
    use strict;
    print "Content-type: text/html\n\n";
    print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
    my $sortie = `tasklist`;
    print "=============================\n";
    print "$sortie\n";
    print "=============================\n";
    Par contre pour avoir un résultat correcte il te faudra faire un petit formatage

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 50
    Points : 54
    Points
    54
    Par défaut
    merci pour ton aide.
    Mais ça me marque l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Use of uninitialized value in concatenation (.) or string at C:\Inetpub\Scripts\shell2.pl line 7.
    Comme si tasklist ne retournait rien et donc n'initialisait pas la variable $sortie.

  14. #14
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu es sous quel Windows ? Sinon il y a toujours les solutions Perl comme le module Win32::Process::Info par exemple.

    --
    Jedaï

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 50
    Points : 54
    Points
    54
    Par défaut
    Je suis sous windows xp, j'ai esséy ta méthode,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    use Win32::Process::Info;
     $pi = Win32::Process::Info->new ([machine], [variant]);
     $pi->Set (elapsed_as_seconds => 0);    # In clunks, not seconds.
     @pids = $pi->ListPids ();      # Get all known PIDs
     @info = $pi->GetProcInfo ();   # Get the max
     %subs = $pi->Subprocesses ();  # Figure out subprocess relationships.
    Cela me retourne une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Can't locate Win32/Process/Info.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at C:\Inetpub\Scripts\shell.pl line 5.
    BEGIN failed--compilation aborted at C:\Inetpub\Scripts\shell.pl line 5.

  16. #16
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    est-ce que tu as bien installé ce module sur ta machine (avec ppm en ligne de commande)?

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 50
    Points : 54
    Points
    54
    Par défaut
    Exact c'est ce que je viens de faire.
    (pour info : install Win32-Process-Info dans l'invite de commande ppm)

    J'obtiens maleheureusement ue nouvelle erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Error - Variant 'NT' is unsupported on your configuration. Can't locate Win32/API.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at C:/Perl/site/lib/Win32/Process/Info.pm line 199.
     at C:\Inetpub\Scripts\shell.pl line 15
     at C:\Inetpub\Scripts\shell.pl line 15
    Que dois-je renseigner dans le champs 'Variant' sachant qu eje suis sous windows xp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $pi = Win32::Process::Info->new ("PC1036", "NT");
    $pi->Set (elapsed_as_seconds => 0);    # In clunks, not seconds.
    my @pids = $pi->ListPids ();      # Get all known PIDs
    my @info = $pi->GetProcInfo ();   # Get the max
    my %subs = $pi->Subprocesses ();  # Figure out subprocess relationships.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 50
    Points : 54
    Points
    54
    Par défaut
    Bon en réalité j'arrive à récupérer le résultat de pslist.exe, mais uniquement par le mode console de perl.
    Ma question est la suivante :

    Est-il possible, depuis une page perl ouverte via le navigateur (interpretée par ie par exemple) de lancer l'execution d'un autre script perl en mode console ?

    Voilà le code qui marche que je rentre manuellement dans demarrer->executer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:\perl\bin\perl.exe -e "open(FILEHANDLE,'C:\Inetpub\Scripts\pslist.exe>C:\Inetpub\Scripts\shell.txt |');close(FILEHANDLE);"
    Cela a pour effet d'ecrire le resultat de l'executable pslist dan sle fichie rnommé shell.txt.
    J'aimerai donc que cette manip soit réalisé par script perl

    Merci d'avance à vous

  19. #19
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Essaie ceci (j'ai testé sur mon poste sous 2000 et ça marche)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    use strict;
     
    my $Prog = 'C:\Inetpub\Scripts\pslist.exe';
     
    print `$Prog`;
    Dans cet exemple, je ne fais qu'afficher ce que retourne pslist.exe, mais tu peux très bien affecter le contenu de ce qu'il retourne à une liste ou un scalaire.

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 50
    Points : 54
    Points
    54
    Par défaut
    J'ai toujours le meme message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PsList 1.26 - Process Information Lister Copyright (C) 1999-2004 Mark Russinovich Sysinternals - www.sysinternals.com Processor performance object not found on PC1036 Run Exctrlst from the Windows Resource Kit to repair the performance counters.
    Serait-ce un problème de droits d'exécution ?
    Je fais marcher mes scripts sous iis.

    Lorsque je lance directement pslist.exe via l'invite de commande windows ça marche pourtant...

Discussions similaires

  1. Fermer une application externe
    Par jean tof dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/05/2006, 16h18
  2. [C#] [VS.NET] Réutiliser une Form d'une application windows?
    Par yannick_sch dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/10/2004, 14h28
  3. Focus sur une application Windows
    Par mixi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/10/2004, 19h57
  4. [VB6]Fermer une application avec VB
    Par Mylou dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/04/2003, 21h32
  5. Fermer une application à l'aide de OnIdle
    Par Thierry Rapp dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/08/2002, 12h44

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