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 :

Comment controler cmd.exe avec system()


Sujet :

C

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Comment controler cmd.exe avec system()
    Bonjour,

    J'ai ecrit un petit programme en C qui me permet de demarrer un autre programme (en l'occurence VLC) et de le killer en appuyant sur 'q'.
    J'utilise la fonction system(), et pour ne pas attendre la fin de l'execution de VLC pour pouvoir le killer (aucun interet sinon), je fais
    qui redonne la main sous bash.

    Je ne sais pas comment faire sous Windows par contre avec cmd.exe ! Je cherche l'equivalent de ce '&'. Voila mon code sous Windows :
    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
     
    int main()
    {
     
        printf("Lancement VLC :\n");
        system ("\"c:\\Program Files\\VideoLAN\\VLC\\vlc\"");
     
        printf("Appuyez sur q pour quitter VLC : ");
     
        while (getchar() != 'q')
        {
            printf("Appuyez sur q pour quitter VLC : ");
     
            while (getchar() != '\n')
            {
                continue;
            }
     
        }
     
        system("tskill vlc");
        return 0;
    }
    ... qui ne sert a rien donc puisque il faut manuellement fermer VLC pour que le programme poursuive son execution (et demande alors de fermer VLC alors qu'on a deja ete oblige de le faire) !

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    L'équivalent plus ou moins est supposé être la commande start, sauf que ses créateurs ont eu la main un peu lourde et ont rendu la commande pratiquement inutilisable si tu veux passer des paramètres au programme.

    C'est pourquoi généralement, on utilise les fonctions spécifiques à Windows (notamment ShellExecuteEx() ou CreateProcess()) au lieu de system().
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup, c'est exactement ce que je recherchais ! Mon code ressemble maintenant a ca :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
     
     
    int main()
    {
        char path[100] = "\"C:\\Program Files\\VideoLAN\\VLC\\";
     
        printf("Lancement de VLC :\n");
     
        HINSTANCE hint;
    	SHELLEXECUTEINFO sei = { 0 };
     
    	sei.cbSize = sizeof(sei);
    	sei.fMask = SEE_MASK_NOCLOSEPROCESS;
    	sei.hwnd = NULL;
    	sei.lpVerb = NULL;
    	sei.lpFile = "\"C:\\Program Files\\VideoLAN\\VLC\\vlc.exe\"";
    	sei.lpParameters = "\"C:\\Program Files\\VideoLAN\\VLC\\nuts.avi\"";
    	sei.nShow = SW_SHOWDEFAULT;
    	sei.hInstApp = hint;
     
    	if(ShellExecuteEx(&sei) && hint > (HINSTANCE)32) printf("Lancement ok\n");
    	else printf("Erreur lancement\n");
     
        printf("Appuyez sur q pour tuer VNC : ");
        while (getchar() != 'q')
        {
            printf("Appuyez sur q pour tuer VNC : ");
            while (getchar() != '\n')
                continue;
        }
     
        TerminateProcess(sei.hProcess, 0);
        CloseHandle(sei.hProcess);
     
        return 0;
    }
    Je le poste pour savoir si c'est la facon conventionnelle de killer le processus que je lance (vlc) !

    Du moins ca m'a l'air plus propre qu'un killall sous Linux, existe-t-il un moyen de faire la meme chose sous Linux (killall va tuer toutes les instances de VLC, meme celles lancees en dehors de mon programme) ?

    De meme, sous Linux, avec J'ai des informations qui continuent a s'afficher et cela se melange avec mes printf, ce qui est plutot moche (VLC me dit qu'il demarre une video, avec tel codec). Avec ShellExecute je n'ai plus ce probleme, c'est aussi possible de faire cela sous Linux ?

    ps : c'est marrant, j'ai commence par demander l'equivalent Win de quelque chose dispo sous Linux et maintenant c'est completement l'inverse !

Discussions similaires

  1. ouvrir un cmd.exe avec param
    Par noobyyy dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 26/09/2011, 19h13
  2. Réponses: 2
    Dernier message: 08/10/2009, 16h53
  3. Réponses: 7
    Dernier message: 10/02/2009, 14h41
  4. comment lancer un exe avec parametre avec shell
    Par niceen dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/05/2008, 19h56
  5. Comment créer un .exe avec Eclipse 3.1 ?
    Par aure-sky dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 12/09/2006, 17h50

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