Masquer ou afficher la console avec MFC [Résolu]

cs_PierLab 7 Messages postés mardi 15 février 2005Date d'inscription 6 juin 2007 Dernière intervention - 5 juin 2007 à 15:52 - Dernière réponse : cs_vicenzo 179 Messages postés mardi 16 août 2005Date d'inscription 25 août 2010 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
cs_PierLab 7 Messages postés mardi 15 février 2005Date d'inscription 6 juin 2007 Dernière intervention - 6 juin 2007 à 10:03
3
Merci
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.

Merci cs_PierLab 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_PierLab
THEwarrior333 192 Messages postés vendredi 19 mars 2004Date d'inscription 30 janvier 2008 Dernière intervention - 5 juin 2007 à 16:00
0
Merci
je te propose d'utiliser FreeImage qui s'utilise comme librairie: ainsi, plus de ligne de commande!
Commenter la réponse de THEwarrior333
cs_PierLab 7 Messages postés mardi 15 février 2005Date d'inscription 6 juin 2007 Dernière intervention - 5 juin 2007 à 16:31
0
Merci
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.
Commenter la réponse de cs_PierLab
THEwarrior333 192 Messages postés vendredi 19 mars 2004Date d'inscription 30 janvier 2008 Dernière intervention - 5 juin 2007 à 17:30
0
Merci
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?
Commenter la réponse de THEwarrior333
cs_PierLab 7 Messages postés mardi 15 février 2005Date d'inscription 6 juin 2007 Dernière intervention - 5 juin 2007 à 17:38
0
Merci
oui, l'ami c'est ce que je veux dire.

Si tu connais la réponse à ma question n'hésites pas.
Commenter la réponse de cs_PierLab
THEwarrior333 192 Messages postés vendredi 19 mars 2004Date d'inscription 30 janvier 2008 Dernière intervention - 5 juin 2007 à 19:12
0
Merci
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.
Commenter la réponse de THEwarrior333
cs_vicenzo 179 Messages postés mardi 16 août 2005Date d'inscription 25 août 2010 Dernière intervention - 5 juin 2007 à 19:20
0
Merci
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);
Commenter la réponse de cs_vicenzo
cs_vicenzo 179 Messages postés mardi 16 août 2005Date d'inscription 25 août 2010 Dernière intervention - 5 juin 2007 à 19:26
0
Merci
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 );}
Commenter la réponse de cs_vicenzo
THEwarrior333 192 Messages postés vendredi 19 mars 2004Date d'inscription 30 janvier 2008 Dernière intervention - 5 juin 2007 à 19:28
0
Merci
Mais c'est pas un peu dommage de se priver de la librairie? (sauf si on ne peut faire autrement...)
Commenter la réponse de THEwarrior333
cs_PierLab 7 Messages postés mardi 15 février 2005Date d'inscription 6 juin 2007 Dernière intervention - 5 juin 2007 à 19:54
0
Merci
Merci pour les infos, je testerai ca demain, et je vous dirai ce ke ca donne.

Merci les codeurs
Commenter la réponse de cs_PierLab
cs_PierLab 7 Messages postés mardi 15 février 2005Date d'inscription 6 juin 2007 Dernière intervention - 6 juin 2007 à 09:03
0
Merci
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.
Commenter la réponse de cs_PierLab
cs_PierLab 7 Messages postés mardi 15 février 2005Date d'inscription 6 juin 2007 Dernière intervention - 6 juin 2007 à 11:32
0
Merci
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+
Commenter la réponse de cs_PierLab
cs_vicenzo 179 Messages postés mardi 16 août 2005Date d'inscription 25 août 2010 Dernière intervention - 6 juin 2007 à 19:36
0
Merci
un Sleep de 1 ms, t'a une dent contre ton proco ?

un WaitForSingleObject sera beaucoup moins gourmand.... mais faut alors utiliser createrprocess...
Commenter la réponse de cs_vicenzo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.