Bonjour à tous,

J'ai un problème que je ne sais résoudre, mais ne suis pas totalement sûr que ce problème vienne de GTK+. Je le soupconne tout de même, je la pose donc ici. N'hésitez pas à me dire si je suis hors sujet.

Je développe des codes GTK avec Code::Blocks et je les compile en mode "release" c'est à dire sans l'apparition d'un console en mode texte. Jusqu'ici tout va bien.

Le code que je développe doit - à l’occasion - lancer momentanément d'autres applications, et j'utilise la fonction C system() pour ca. Voici un exemple de code qui lance Word (sur une machine tournant sous windows) lorsque l'utilisateur clique sur un bouton :

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
#include <stdlib.h>
#include <gtk/gtk.h>
#include <string.h>
 
int main(int argc,char **argv)
{
    GtkWidget* pWindow;
    GtkWidget* pBouton;
    gtk_init(&argc,&argv);
    void lancer_word(GtkButton *button, gpointer user_data); /* fonction callback sur le boutton */
    pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(pWindow), "lancer un programme exterieur");
    /* Creation du bouton */
    pBouton=gtk_button_new_with_label("Lancer word");
    /* On ajoute le bouton a l'intérieur de la fenêtre */
    gtk_container_add(GTK_CONTAINER(pWindow), pBouton);
    /* Affichage de la fenêtré et de tout ce qu'il contient */
    gtk_widget_show_all(pWindow);
    /* Connexion des signaux */
    g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    g_signal_connect(G_OBJECT(pBouton), "clicked", G_CALLBACK(lancer_word), NULL);
    gtk_main();
    return EXIT_SUCCESS;
}
 
void lancer_word(GtkButton *button, gpointer user_data)
{
    char tempo[500], guillemet[2];
    guillemet[0]='\042';
    guillemet[1]='\0';
    (void)sprintf(tempo,"%sC:\\Program Files (x86)\\Microsoft Office\\Office12\\winword.exe%s",guillemet,guillemet);
    (void)system(tempo);
}
Ca marche bien, sauf à un détail près : En même temps que l'application est lancée, une fenêtre console vide s'ouvre, ce qui n'est pas ni utile, ni souhaitable. Ceci ne dépend évidement pas de l'appli extérieure lancée. Est-ce GTK+ qui génère ca lorsqu'un fonction système est invoquée ? En clair : Comment se débarrasser de ce truc ? Je ne crois pas que ceci vienne des options de compilation, car l'appli, par défaut, se lance bien sans console..

Toute aide sur ce point est la bienvenue.

Cordialement, Eric.