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

Windows Discussion :

Problème avec une condition IF


Sujet :

Windows

  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec une condition IF
    Bonjour,

    Je m'intéresse depuis peu à la programmation Windows en C, à l'aide du SDK et de VC 9.0.

    J'ai repris un exemple de code du SDK pour et légèrement modifié pour :
    - passer en paramètre du programme un PID
    - récupérer dans un tableau la liste de tous les PID
    - si le PID existe et est égal à celui passé en paramètre, alors l'afficher à l'écran

    Le programme compile sans erreur, mais en l'exécutant, il n'affiche rien à l'écran (alors que le processus dont je passe le PID en paramètre existe bien).
    Si je retire le test conditionnel if, il m'affiche bien tous les PID de tous les processus.

    Je ne comprends pas mon erreur dans le if. Quelqu'un peut m'expliquer ?

    Merci pour votre aide.

    Code C : 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
    #include <windows.h>
    #include <stdio.h>
    #include <tchar.h>
    #include <psapi.h>
     
     
    int main(int argc, int *argv[])
    {
     
     
        /* liste des pid */
     
        DWORD aProcesses[1024], cbNeeded, cProcesses;
        unsigned int i;
     
        if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
            return 1;
     
        /* nombre de process retournés */
     
        cProcesses = cbNeeded / sizeof(DWORD);
     
     
        /* affiche le PID passé en paramètre */
     
        for ( i = 0; i < cProcesses; i++ )
        {
            /* c'est avec ce if que j'ai un problème */
            if(aProcesses[i] == argv[1])
            {
                printf("PID : %d\n", aProcesses[i]);
            }
        }
     
        return 0;
    }

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Voe,

    aProcesses est un tableau de DWORD, alors que argv est un tableau de chaînes de caractères.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Si tu ne passes qu'un seul paramètre tu es censé avoir argv[0] à la place de argv[1]. Tous les index commencent toujours à 0 et non pas 1...

    Essaye ça déjà.

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 369
    Points
    50 369
    Par défaut
    Citation Envoyé par Hellnino18 Voir le message
    Si tu ne passes qu'un seul paramètre tu es censé avoir argv[0] à la place de argv[1]. Tous les index commencent toujours à 0 et non pas 1...
    Oui mais argv[0], c'est le noim du programme.

    Le premier paramètre, c'est bien argv[1];

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    D'accord autant pour moi, ma précipitation me joue des tours

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par droggo Voir le message
    Voe,

    aProcesses est un tableau de DWORD, alors que argv est un tableau de chaînes de caractères.
    Ok, c'est déjà une bonne piste. Comment je fais pour caster argv[1] en DWORD ? Est-ce possible comme ça ?

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    if(aProcesses[i] == (DWORD)argv[1])

  7. #7
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    Salut tout le monde
    int main(int argc, int *argv[])
    Normalement ça s'écrit
    int main(int argc, char *argv[])

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par buggen25 Voir le message
    Salut tout le monde
    int main(int argc, int *argv[])
    Normalement ça s'écrit
    int main(int argc, char *argv[])
    Oui effectivement, j'ai corrigé, mais ça ne fonctionne toujours pas.

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 369
    Points
    50 369
    Par défaut
    Le début de réponse est dans le message précédent et ensuite pour le test, c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(aProcesses[i] == atoi(argv[1]))

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Le début de réponse est dans le message précédent et ensuite pour le test, c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(aProcesses[i] == atoi(argv[1]))
    Nickel ! Merci beaucoup, ça fonctionne parfaitement. Je vais pouvoir passer à la suite !

  11. #11
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    Tu peux utiliser atoi(argv[]) Dés lors que tu viens d'utiliser
    J'etait trop lent !

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par buggen25 Voir le message
    Tu peux utiliser atoi(argv[]) Dés lors que tu viens d'utiliser
    J'etait trop lent !
    Merci quand-même

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

Discussions similaires

  1. Problème avec une condition
    Par koKoTis dans le forum Langage
    Réponses: 6
    Dernier message: 01/07/2011, 10h35
  2. Réponses: 1
    Dernier message: 24/02/2011, 11h37
  3. [XL-2010] probléme avec une condition sous toute une colonne
    Par Fawez dans le forum Excel
    Réponses: 1
    Dernier message: 12/06/2010, 13h18
  4. Problème avec une Condition Ou ||
    Par Jcpan dans le forum Débuter avec Java
    Réponses: 12
    Dernier message: 14/01/2009, 13h19
  5. Problème avec une condition
    Par ghan77 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/12/2005, 17h18

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