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 :

[API Win32] Fonction ShellExecute


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 67
    Par défaut [API Win32] Fonction ShellExecute
    Bonsoir à tous,

    Je développe une application en mode console et j'aimerai lancer une autre application, attendre qu'elle ait terminé son travail et ensuite poursuivre l'éxécution de mon code.
    Voilà ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int o = ShellExecute(NULL,"open","convert.exe",argv[3],".",0);
    Sleep(3000);
    çà marche parce que j'attends quand même 3s mais c'est trop long.
    Existe-t-il un moyen de récupérer le message fin d'exécution de l'application convert ?

    Merci de votre aide

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Utiliser ShellExecuteEx() ou CreateProcess() pour récupérer un HANDLE de processus et faire un WaitForSignleObject() dessus ?
    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.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 67
    Par défaut
    J'ai essayé çà mais çà ne marche pas.
    Où est l'erreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        SHELLEXECUTEINFO ShExecInfo;
        HANDLE handleConv;
    
       ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
       ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
       ShExecInfo.lpVerb = "open";
       ShExecInfo.lpFile = "convert.exe";
       ShExecInfo.lpParameters = argv[1];
       ShExecInfo.hProcess = handleConv;
    
        ShellExecuteEx(&ShExecInfo);

  4. #4
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut
    Salut !

    Citation Envoyé par akrodev
    J'ai essayé çà mais çà ne marche pas.
    Où est l'erreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        SHELLEXECUTEINFO ShExecInfo;
        HANDLE handleConv;
     
       ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
       ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
       ShExecInfo.lpVerb = "open";
       ShExecInfo.lpFile = "convert.exe";
       ShExecInfo.lpParameters = argv[1];
       ShExecInfo.hProcess = handleConv;
     
        ShellExecuteEx(&ShExecInfo);

    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
     
    SHELLEXECUTEINFO ShExecInfo;
    ZeroMemory(&ShExecInfo,sizeof(ShExecInfo));
    ShExecInfo.cbSize=sizeof(ShExecInfo);
    ShExecInfo.hwnd=NULL;
    ShExecInfo.nShow=SW_SHOWNORMAL;
    ShExecInfo.fMask=SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.lpVerb=NULL;
     
     
    /*Si c'est le même repertoire que ton application... : */
    ShExecInfo.lpFile=".\\convert.exe";
    ShExecInfo.lpParameters=argv[1];
     
     
     
    if ( ShellExecuteEx(&ShExecInfo) ) 
              WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
     
     
    /*Continuer ici si seulement si convert.exe a bien été terminé
    (ou prob de ShellExecute :-( */
    ++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 67
    Par défaut
    çà marche.
    Merci de ton aide.

    Mon erreur était au niveau de l'allocation mémoire ?

  6. #6
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par Interruption13h
    Salut !




    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
     
    SHELLEXECUTEINFO ShExecInfo;
    ZeroMemory(&ShExecInfo,sizeof(ShExecInfo));
    ShExecInfo.cbSize=sizeof(ShExecInfo);
    ShExecInfo.hwnd=NULL;
    ShExecInfo.nShow=SW_SHOWNORMAL;
    ShExecInfo.fMask=SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.lpVerb=NULL;
     
     
    /*Si c'est le même repertoire que ton application... : */
    ShExecInfo.lpFile=".\\convert.exe";
    ShExecInfo.lpParameters=argv[1];
     
     
     
    if ( ShellExecuteEx(&ShExecInfo) ) 
              WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
     
     
    /*Continuer ici si seulement si convert.exe a bien été terminé
    (ou prob de ShellExecute :-( */
    ++
    Les servent a quoi?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    ça force à regarder dans le répertoire courant (".").
    On a donc .\convert.exe, et le \ est doublé car \ est le caractère d'échappement du C (\n, \", etc.)
    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.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2010, 20h23
  2. Fonction api win32 ReadFile : lire trame de longueur inconnue?
    Par filipaillou dans le forum Visual C++
    Réponses: 1
    Dernier message: 30/04/2009, 10h01
  3. [API Win32] ShellExecute
    Par sloshy dans le forum Windows
    Réponses: 13
    Dernier message: 09/03/2008, 18h29
  4. Réponses: 4
    Dernier message: 16/01/2007, 13h16
  5. Réponses: 2
    Dernier message: 13/06/2006, 20h47

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