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

C Discussion :

Tester un processus


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Par défaut Tester un processus
    Bonjour, j'aimerais savoir si c'est possible de tester un processus en C

    j'avais déjà longtemps cherché (d'où la raison de ce post) et n'ayant pas trouvé de solution j'avais pensé a récurer le handle d'une fenêtre mais là encore problème le handle d'une fenêtre change tout le temps.

    J'utilise Windows vista.

    Merci de toute vos réponse, Neexus.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Bonjour,

    Je ne comprends pas bien ce que tu souhaites faire...
    Peux tu préciser ce que tu entends par "tester un processus" ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Par défaut
    Par exemple

    if (processus("photoshop.exe") est ouvert
    { alors
    ouvrir les tutoriels de photoshop
    }

    savoir si un programme es lancé ou non

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Ok.
    Donc il te faut des fonctions spécifiques à ton système...
    A priori tu as l'air d'être sous Windows donc regarde dans la msdn, je pense qu'il y a quelque chose de possible...

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

    Il est possible d'énumérer les processus tournants sous Windows.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Par défaut
    Salut j'ai pas trop compris la source que tu m'as donné

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    EnumProcesses est appelé pour connaitre l'identifiant (ID) de chaque processus en cours d'exécution.

    OpenProcess est appelé pour obtenir le HANDLE d'un processus à partir de son ID

    EnumProcessModules permet de récupérer les modules chargés par le processus. Le premier module correspond au fichier exécutable.

    GetModuleBaseName permet de récupérer le fichier d'où a été chargé le module.

    Ce qui va t'intéresser, c'est la valeur que va te donner GetModuleBaseName.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Par défaut
    Mais c'est génial !!!
    merci beaucoup, je vais tester tout ça =D =D

    Ce serait possible que quelqu'un me donne une source avec l'une de ces fonctions que je vois comment bien les utiliser.. ?

  9. #9
    Invité(e)
    Invité(e)
    Par défaut
    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
    #include <windows.h>
    #include <stdio.h>
    #include <psapi.h>
     
    void PrintProcessNameAndID( DWORD processID )
    {
        char szProcessName[MAX_PATH] = "<unknown>";
     
        /* Récupération du handle du processus */
     
        HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                       PROCESS_VM_READ,
                                       FALSE, processID );
     
     
        if (NULL != hProcess )
        {
            HMODULE hMod;
            DWORD cbNeeded;
            /* récupération du premier module */
            if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
                 &cbNeeded) )
            {
                /* récupération du nom */
                GetModuleBaseName( hProcess, hMod, szProcessName, 
                                   sizeof(szProcessName)/sizeof(char) );
                 printf("%ld: %s\n", processID, szProcessName  );
            }
        }
     
        CloseHandle( hProcess );
    }
     
    int main( void )
    {
     
        DWORD aProcesses[1024], cbNeeded, cProcesses;
        unsigned int i;
     
        /* récupération des processsus en cours */
        if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
            return 0;
     
        /* calcul de nombre de processus */
        cProcesses = cbNeeded / sizeof(DWORD);
     
        /* affichage des processus */
        for ( i = 0; i < cProcesses; i++ )
            if( aProcesses[i] != 0 )
                PrintProcessNameAndID( aProcesses[i] );
     
        return 0;
    }
    A lier avec psapi.
    Donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    1956: TSVNCache.exe
    3536: mobsync.exe
    2556: OUTLOOK.EXE
    1540: firefox.exe
    1280: bds.exe
    4796: EXCEL.EXE
    ...

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Par défaut
    A lier avec psapi.
    L'include <psapi.h> mais il me marque pourtant encore des erreurs :

    Dans la fonction « PrintProcessNameAndID » (obj\Debug\main.o)
    Ligne 21 référence indéfini « _EnumProcessModules@16 » (main.c)
    Ligne 25 référence indéfini « _GetModuleBaseNameA@16 » (main.c)

    Dans la fonction « main » (obj\Debug\main.o)
    Ligne 41 référence indéfini « _EnumProcesses@12 » (main.c)

    ||=== Fin de la compilation: 3 erreurs, 0 danger ===|

  11. #11
    Invité(e)
    Invité(e)
    Par défaut
    Pour se lier à une bibliothèque avec Visual c++, voir ici. Avec gcc, c'est l'option -l (L minuscule)

  12. #12
    Membre très actif
    Inscrit en
    Décembre 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 150
    Par défaut Tester un processus
    es tu peux m'expliquer plus comment faire la laison avec psapi.

Discussions similaires

  1. Tester un processus jusqu'à ce qu'il soit inactif
    Par Acid59 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/01/2014, 14h21
  2. Tester un processus automatisé avec Selenium
    Par badrodoja dans le forum Test
    Réponses: 6
    Dernier message: 10/03/2011, 12h56
  3. Réponses: 7
    Dernier message: 15/06/2007, 18h50
  4. tester si un processus est en marche dans un script
    Par Smix007 dans le forum Windows XP
    Réponses: 1
    Dernier message: 04/05/2007, 09h32
  5. Tester execution d'un processus
    Par lafracas dans le forum POSIX
    Réponses: 6
    Dernier message: 25/05/2006, 22h53

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