Masquer ou afficher la console avec MFC

Résolu
cs_PierLab Messages postés 7 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 6 juin 2007 - 5 juin 2007 à 15:52
cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 - 6 juin 2007 à 19:36
Bonjour à tous,

Tout d'abord je remercie toute la communauté de programmeurs qui fait vivre ce site, car sans vous je n'irais pas très loin, le forum m'a souvent été d'une aide précieuse.

Ma question est la suivante:

Je développe une application de traitement d'image en C++ en utilisant MFC.
Lorsque je traite une image, je fais appel à un logiciel qui me permet de convertir des images Tif en Bmp. Le logiciel s'appelle ImageMagick.
Ce logiciel s'execute en ligne de commande (ex: on tape dans l'invite de commande : convert image1.tif image2.bmp pour convertir l'image1 au format Tif en image2 au format Bmp).

Pour cela, je n'ai rien trouvé de mieux que l'utilisation de la fonction system( ).
Pour info, dans mon code, j'ai mis ça:  system("convert test.tif test2.bmp");

Mon probleme est que la fenêtre de la console apparait brièvement puis disparait (le temps convertir l'image).

J'aimerais savoir si il est possible d'empécher la fenêtre d'apparaître (dans un soucis d'esthétique).

Merci à vous,

Bonne continuation,

Pierlab.

13 réponses

cs_PierLab Messages postés 7 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 6 juin 2007
6 juin 2007 à 10:03
J'ai réglé mon problème, j'utilise la fonction ShellExecute de la façon suivante:

    ShellExecute(NULL,"open",convert_path,param,NULL,SW_HIDE);

Voila, par contre je suis obligé de faire un _sleep(500) juste après, le temps que la conversion soit finie, avant de faire le traitement.
3
THEwarrior333 Messages postés 192 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 30 janvier 2008
5 juin 2007 à 16:00
je te propose d'utiliser FreeImage qui s'utilise comme librairie: ainsi, plus de ligne de commande!
0
cs_PierLab Messages postés 7 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 6 juin 2007
5 juin 2007 à 16:31
J'utilise déjà CImg mais mon problème n'est pas la.

CImg permet aussi d'ouvrir des image Tif . L'ennui, c'est que j'ouvre des fichier Tif multi-image. Si j'ouvre un fichier multi-image de facon classique (avec CImg, FreeImage, ou quoi que ce soit...), ca prend 6 secondes (les fichiers sont assez gros), en les convertissant avant, je tombe a 1,5 secondes.

Je doit donc utiliser l'invite de commande.

Ca fait un petit moment que je cherche mais je trouve pas, je voudrais seulement savoir si on peut masquer la console.
0
THEwarrior333 Messages postés 192 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 30 janvier 2008
5 juin 2007 à 17:30
Tu veux dire qu'executer la conversion tif->bmp en invite de
commande est plus rapide que d'appeler la fonction de conversion de la
librairie dans ton code?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_PierLab Messages postés 7 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 6 juin 2007
5 juin 2007 à 17:38
oui, l'ami c'est ce que je veux dire.

Si tu connais la réponse à ma question n'hésites pas.
0
THEwarrior333 Messages postés 192 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 30 janvier 2008
5 juin 2007 à 19:12
T'es t-il possible dans le code de convertir l'image sans avoir à la
charger? (il me semble qu avec FreeImage cela soit impossible mais on
ne sait jamais) car il semblerait qu'en ligne de commande le programme
appelle une fonction qui ne charge pas l'image au préalable, d'ou une
conversion plus rapide.
0
cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 1
5 juin 2007 à 19:20
STARTUPINFO startUpInfo = {sizeof(STARTUPINFO),NULL,NULL,NULL,0,0,0,0,0,0,0,STARTF_USESHOWWINDOW,SW_HIDE,0,NULL,0,0,0}; 
           
 CreateProcess("convert.exe" , "test.tif test2.bmp", NULL,NULL,NULL,0,NULL,NULL,NULL,&pi);
0
cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 1
5 juin 2007 à 19:26
Et si tu veux attendre la fin du process :

PROCESS_INFORMATION pi;
STARTUPINFO startUpInfo = {sizeof(STARTUPINFO),NULL,NULL,NULL,0,0,0,0,0,0,0,STARTF_USESHOWWINDOW,SW_HIDE,0,NULL,0,0,0}; 
           
if ( CreateProcess("convert.exe" , "test.tif test2.bmp", NULL,NULL,NULL,0,NULL,NULL,NULL,&pi))
{  
    WaitForSingleObject( pi.hProcess, INFINITE );}
0
THEwarrior333 Messages postés 192 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 30 janvier 2008
5 juin 2007 à 19:28
Mais c'est pas un peu dommage de se priver de la librairie? (sauf si on ne peut faire autrement...)
0
cs_PierLab Messages postés 7 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 6 juin 2007
5 juin 2007 à 19:54
Merci pour les infos, je testerai ca demain, et je vous dirai ce ke ca donne.

Merci les codeurs
0
cs_PierLab Messages postés 7 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 6 juin 2007
6 juin 2007 à 09:03
Re tout le monde.

Bn alors je viens de tester ton bout de code comme ca, en changeant juste le chemin de mon .exe et des parametres et ca me fait une erreur (access violation... un dépassement de tableau je pense).
J'ai regardé dans la doc MSDN pour voir un peu ce qu'il faut mettre dans la fonction CreateProcess.

Du coup j'ai changer certains parametres:
//la, y'a rien qui change
STARTUPINFO startUpInfo = {sizeof(STARTUPINFO),NULL,NULL,NULL,
0,0,0,0,0,0,0,STARTF_USESHOWWINDOW,SW_HIDE,0,NULL,0,0,0};
//c'est la que ca change un peu
CreateProcess(convert_path,param,NULL,NULL,0,NORMAL_PRIORITY_CLASS,
NULL,NULL,&startUpInfo,&pi);

Alors ca plante plus, mais ca fait rien, pas de conversion, que dalle.

Je sais que ca vient du &startUpInfo que j'ai mis a la fin de la fonction car si je mets NULL a la place, ca plante.

Si quelqu'un peu m'expliquer comment fonction cette fonction ce serait sympa.
0
cs_PierLab Messages postés 7 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 6 juin 2007
6 juin 2007 à 11:32
finalement, je fais ca : 
//on attend que le fichier Bmp soit créé
FILE *file=fopen("fichier.bmp","r");
while(!file) 
{
file=fopen("fichier.bmp","r");
_sleep(1); 
}
fclose(file);

Merci pour le coup de main.

A+
0
cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 1
6 juin 2007 à 19:36
un Sleep de 1 ms, t'a une dent contre ton proco ?

un WaitForSingleObject sera beaucoup moins gourmand.... mais faut alors utiliser createrprocess...
0
Rejoignez-nous