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

Threads & Processus C++ Discussion :

Arrêter un processus avec seulement son nom


Sujet :

Threads & Processus C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 38
    Points
    38
    Par défaut Arrêter un processus avec seulement son nom
    Bonjour,

    Je programme actuellement une application qui doit pouvoir en arrêter une autre.
    J'ai déjà regardé http://cpp.developpez.com/faq/vc/?page=ProcessThread mais je n'ai pas trouvé se qui correspond à se que je recherche.
    J'ai testé la dernière fonction proposé dans cette page, mais j'ai une erreur me disant que PROCESSENTRY32 n'est pas déclaré.

    Connaissez vous un moyen de terminer une application (un processus) en ne connaissant que son nom soit en utilisant la fonction proposé ci dessus soit par un autre moyen ?

    Je vous remercie par avance !!!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Points : 149
    Points
    149
    Par défaut
    Bonsoir,

    Si tu utilises l'exemple de la FAQ, il te faut evidemment ajouter ces "include" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <windows.h>
    #include <tlhelp32.h>
    La structure PROCESSENTRY32 étant définie dans tlhelp32.h
    A+,
    Agamitsudo
    Un ordinateur fait au bas mot 1 million d'opérations à la seconde, mais il n'a que ça à penser, aussi. (brèves de comptoirs, JM.Gourio)


  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Je te remercies pour ta réponse, l'erreur a disparu.

    Par contre pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( strstr(uProcess.szExeFile, processName) )
    J'ai l'erreur 'strstr'*: aucune des 2 surcharges n'a pu convertir tous les types d'arguments
    J'ai donc rajouté un cast :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( strstr((char *)uProcess.szExeFile, (char *)processName) )
    La solution se compile mais par contre l'application demandée en argument ne se termine pas, la fonction isProcessRunning indique que le processus ne tourne pas alors que c'est le cas...

    Vous auriez une idée ?

    Merci d'avance !!

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Évidemment que ça ne marche pas. Lis ma signature.

    processName doit être de type const TCHAR * (ou LPCTSTR).

    Sinon, tu peux :
    renoncer à la compatibilité unicode pour l'instant et compiler an Multi-Byte (voir les options du projet)
    ou renoncer complètement à la compatibilité unicode et utiliser spécifiquement la version "ANSI" des fonctions : Process32FirstA() et une structure PROCESSENTRY32A.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Je te remercies pour ta réponses, mais j'ai pas tout compris

    Citation Envoyé par Médinoc Voir le message
    processName doit être de type const TCHAR * (ou LPCTSTR).
    Est-ce que tu aurais la possibilité de me montrer quoi modifier la dedans pour que ca fonctionne ?

    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
    #include <windows.h>
    #include <tlhelp32.h>
     
    bool isProcessRunning(char *processName)
    {
        HANDLE hSnapShot;
        PROCESSENTRY32 uProcess;
        BOOL r;
        short PID = 0;
     
        hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
        uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
     
        r = Process32First(hSnapShot, &uProcess);
        do 
        {
            if ( strstr(uProcess.szExeFile, processName) )
                PID = (short) uProcess.th32ProcessID;
     
            r = Process32Next(hSnapShot, &uProcess);
        } while ( r );
        CloseHandle(hSnapShot);
        return (PID != 0);
    }
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	if (isProcessRunning("iexplorer.exe"))
    		printf("internet explorer lancé\n");// lancé
    	else
    		printf("internet explore non lancé\n");// non lancé
    }
    Je te remercie par avance !!!

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je n'ai pas testé, mais essaie ceci:
    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
    #include <windows.h>
    #include <tlhelp32.h>
    #include <tchar.h>
     
    bool isProcessRunning(LPCTSTR processName)
    {
        HANDLE hSnapShot;
        PROCESSENTRY32 uProcess;
        BOOL r;
        DWORD PID = 0;
     
        hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
        uProcess.dwSize = (DWORD) sizeof uProcess;
     
        r = Process32First(hSnapShot, &uProcess);
        do 
        {
            if ( _tcsstr(uProcess.szExeFile, processName) )
                PID = uProcess.th32ProcessID;
     
            r = Process32Next(hSnapShot, &uProcess);
        } while ( r );
        CloseHandle(hSnapShot);
        return (PID != 0);
    }
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	if (isProcessRunning(_T("iexplore.exe")))
    		printf("internet explorer lancé\n");// lancé
    	else
    		printf("internet explore non lancé\n");// non lancé
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    je te remercie, ça fonctionne !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 24/12/2012, 15h49
  2. Tuer un processus à partir de son nom
    Par 1tox dans le forum Linux
    Réponses: 4
    Dernier message: 14/02/2007, 17h48
  3. Upload 1 fichier,seulement son nom et pas toute l'adresse
    Par nebil dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/04/2006, 15h05
  4. Réponses: 3
    Dernier message: 12/07/2005, 13h33

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