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 :
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..
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); }
Toute aide sur ce point est la bienvenue.
Cordialement, Eric.
Partager