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

GTK+ avec C & C++ Discussion :

masquer l'invite de commande


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut masquer l'invite de commande
    bonjour,

    lors de l'execution de mon programme, je vais appel a la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system(ping 192.168.51.45)
    j'ai donc une fenetre d'invite de commande qui souvre, fait le ping et la fenetre se ferme des que le ping est finit.

    Est-ce possible que la fenetre n'apparaisse pas du tout???

  2. #2
    Membre averti

    Inscrit en
    Avril 2002
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 49
    Par défaut
    Je pense que cette question irait plutot dans la section reserver a WINDOWS. Cela na rien avoir avec du GTK.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    ok merci qd mm !!!!!

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par jean
    Je pense que cette question irait plutot dans la section reserver a WINDOWS. Cela na rien avoir avec du GTK.
    Non, il faut utiliser des fonctions de la GLib, il existe une paire de fonctions pour ce genre de choses, je te conseil de voir pour g_spawn_command_line_sync

    L'utilisation en est simple, tu passe en premier argument la commande sous forme de chaîne, ce que gy0m76 n'a pas fait avec l'appel système system alors qu'il le faut (m'étonne d'ailleurs que ca a marché comme il a fait).

    Les 3 arguments sont facultatifs, mettre NULL dans le pire des cas. Le dernier est également facultatif mais je le recommande, il permet de savoir quelle erreur s'est produite s'il y en a eu une en testant le retour de la fonction (ne pas oublier de libérer cette structure d'erreur si elle a été remplie).
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    j'ai essayé cette ligne de commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_spawn_command_line_sync("C:\\cmd.exe -ping 192.168.51.45", NULL, NULL, NULL, NULL);
    il n'y a donc aucune fenetre cmd.exe qui s'ouvre, mais je ne suis pas sur que le ping soit réalisé...

    comment puis-je vérifier ceci?

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par gy0m76
    j'ai essayé cette ligne de commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_spawn_command_line_sync("C:\\cmd.exe -ping 192.168.51.45", NULL, NULL, NULL, NULL);
    il n'y a donc aucune fenetre cmd.exe qui s'ouvre, mais je ne suis pas sur que le ping soit réalisé...

    comment puis-je vérifier ceci?
    Bin ca c'est l'utilité de la ligne de commande

    Dans ton cas faudrais peut-être alors rediriger la sortie standard vers un fichier pour pouvoir constater le résultat mais sous DOS/Windows je ne sais pas comment faire. Par ailleur, il me semble que tu ne sois pas obligé d'appeler directement cmd.exe, ping.exe étant déja un programme exécutable
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    j'ai essayer de rediriger la sortie vers un fichier texte, mais le programme plante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_spawn_command_line_sync("C:\\cmd.exe -ping 192.168.51.45", "C:\\1.txt", NULL, NULL, NULL);

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Déjà, tu as déjà utilisé cette fonction, qu'on t'avais recommandé pour lancer un exécutable donc à la base tu devrais la connaître un peu plus que ca.

    Si tu regarde bien le prototype de la fonction, tu vois que les sorties que tu peux transmettre en argument sont des pointeurs de pointeurs sur char, la fonction attend donc autre chose qu'une simple chaîne de caractère mais bel et bien l'adresse d'un pointeur sur char, pour pouvoir stocker la sortie.

    Maintenant, il te faudrais aussi utiliser en même le dernier argument qui je le dit une nouvelle fois est très pratique pour connaître l'originie des éventuelles erreurs qui pourraient survenir lors de l'utilisation de cette fonction !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    J'ai resolu mon pb, en effet la fenetre ne s'ouvrait pas du tout.
    Mais maintenant je revient au point de départ, j'ai toujours ma fenetre d'invite de commande qui s'ouvre et se referme alors que je souhaitais qu'elle ne souvre pas du tout

    que se soit avec la fonction system() ou avec la fonction g_spawn_command_line_sync(), le résultat est le meme

  10. #10
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Bon, je me suis fait un peu plaisir à faire un petit programme de test et aucun souci, le ping fonctionne, pas d'erreurs et surtout .... pas de fenêtre DOS ... enfin Bash dans mon cas car je suis sous Linux là

    Test voir mon programme ci-dessous. Il te suffit juste de changer l'appel de l'exécutable car nous n'avons clairement pas les mêmes chemins

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    #include <stdlib.h>
    #include <string.h>
     
    #include <gtk/gtk.h>
    #include <glib/gprintf.h>
     
     
    static void cb_func (GtkWidget * p_widget, gpointer p_data)
    {
       gboolean          bret  = FALSE;
       char           *  out   = NULL;
       GError         *  error = NULL;
       GtkTextBuffer  *  p_buf;
       GtkWidget      *  p_txt = p_data;
     
     
       bret = g_spawn_command_line_sync (
          "/bin/ping -w 5 192.168.51.45",
          & out,
          NULL,
          NULL,
          & error
       );
     
     
       p_buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (p_txt));
     
       if (! bret && error != NULL)
       {
          gtk_text_buffer_set_text (
             GTK_TEXT_BUFFER (p_buf),
             error->message,
             strlen (error->message)
          );
     
          g_error_free (error);
       }
       else
       {
          gtk_text_buffer_set_text (
             GTK_TEXT_BUFFER (p_buf),
             out,
             strlen (out)
          );
     
          g_free (out);
       }
    }
     
     
    int main (int argc, char ** argv)
    {
       GtkWidget   *  p_win;
       GtkWidget   *  p_box;
       GtkWidget   *  p_btn;
       GtkWidget   *  p_txt;
     
     
       gtk_init (& argc, & argv);
     
     
       p_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
       gtk_window_set_default_size (GTK_WINDOW (p_win), 640, 480);
       gtk_window_set_title (GTK_WINDOW (p_win), "Ping...");
       gtk_container_set_border_width (GTK_CONTAINER (p_win), 5);
     
       g_signal_connect (
          G_OBJECT (p_win),
          "destroy",
          G_CALLBACK (gtk_main_quit),
          NULL
       );
     
     
       p_box = gtk_vbox_new (FALSE, 0);
       gtk_container_add (GTK_CONTAINER (p_win), p_box);
     
       p_btn = gtk_button_new_with_label ("Lancer le ping...");
       gtk_box_pack_start (GTK_BOX (p_box), p_btn, FALSE, FALSE, 5);
     
       p_txt = gtk_text_view_new ();
       gtk_box_pack_start (GTK_BOX (p_box), p_txt, TRUE, TRUE, 5);
     
       g_signal_connect (
          G_OBJECT (p_btn),
          "clicked",
          G_CALLBACK (cb_func),
          p_txt
       );
     
     
       gtk_widget_show_all (p_win);
       gtk_main ();
     
     
       return EXIT_SUCCESS;
    }
    Dit m'en des nouvelles
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  11. #11
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    j'ai tester le programme que tu ma donné avec la ligne suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bret = g_spawn_command_line_sync ("ping -w 5 192.168.51.45",& out,NULL,NULL,& error);
    lorsque je clique sur lancer le ping, une fenetre DOS s'ouvre mais rien ne s'affiche a l'intérieur...

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par gy0m76
    j'ai tester le programme que tu ma donné avec la ligne suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bret = g_spawn_command_line_sync ("ping -w 5 192.168.51.45",& out,NULL,NULL,& error);
    lorsque je clique sur lancer le ping, une fenetre DOS s'ouvre mais rien ne s'affiche a l'intérieur...
    Oui c'est ce que je viens de constater en faisant un rapide passage sur Windows et en testant mon programme Mais pourquoi ? ... Telle reste entière cette question pour le moment

    Pour le moment je ne saurais vraiment te donner une réponse précise, je vais voir ca
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  13. #13
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    ok merci de ton aide, parce que la, je ne voit vraiment pas comment l'on peut empecher cette fenetre de s'ouvrir...

  14. #14
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par gy0m76
    ok merci de ton aide, parce que la, je ne voit vraiment pas comment l'on peut empecher cette fenetre de s'ouvrir...
    Bin sous Windows je suis un peu dans le même cas, surtout que sur mon beau Linux il n'y a point de fenêtres

    Je verrais ca plus en profondeur d'ici ce soir quand j'aurais peut-être fini mes cours
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. [Batch] masquer l'invite de commande
    Par David7660 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/04/2014, 11h06
  2. Réponses: 6
    Dernier message: 15/01/2010, 22h27
  3. Masquer l'invite de commande dos
    Par franck06 dans le forum Langage
    Réponses: 6
    Dernier message: 15/01/2008, 12h11
  4. masquer l'invite de commande
    Par gy0m76 dans le forum Windows
    Réponses: 10
    Dernier message: 13/11/2006, 14h39
  5. [Clavier] Gestion d'une invite de commandes
    Par Damian dans le forum Assembleur
    Réponses: 9
    Dernier message: 28/04/2005, 17h41

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