MASQUER EFFICACEMENT LA CONSOLE !

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 13 mai 2004 à 21:22
chtitpierre78 Messages postés 30 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 29 décembre 2008 - 2 déc. 2008 à 13:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/22787-masquer-efficacement-la-console

chtitpierre78 Messages postés 30 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 29 décembre 2008
2 déc. 2008 à 13:04
Merci, c'est exactement ca qu'il me fallait :)
cs_Melnofil Messages postés 71 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 1 février 2008
23 mai 2008 à 12:01
"tu devrais avoir plus de modestie quand tu conseil" <== Ouaip, faudrait.
"car tu n'est qu'un petit programmeur" <== Ça c'est ton point de vu basé sur on se demande quoi, mais bizarrement les gens que je connais/j'ai connu IRL ont plutôt tendance à dire le contraire...

Tes deux derniers commentaires n'apportent rien à la source ci-dessus ainsi que le mien actuellement, on sort complètement du débat. Je crois que je vais arrêter les frais en ne surveillant plus cette source : Ergoter sur des trucs vieux de 2 ans c'est marrant 1 ou 2 fois...

De toutes façon, j'ai déjà expliqué en long en large et en travers pourquoi la solution proposée par Microsoft me semble nulle ; de ton coté tu n'as avancé aucun argument pour soutenir ton point de vue. Après tu fais ce que tu veux Tularis, j'oblige personne et c'est toujours bien d'avoir des choix, au cas où ça peux toujours servir un jour... À tchao ++
tularis Messages postés 21 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 12 juillet 2009
13 mai 2008 à 18:49
-_-, bon ok pour l'optimisation, mai bon l'utilisateur lambda i sen fou tant que sa marche ..., ensuite perso si je voulais faire un logiciel de clé usb jen ferai un en winapi, c'est plu simple , le truc c que la je fonction sou linux et que mon logiciel est un logiciel de sécurité par utilisateur, tu configure l'appli et op tu lance les traitements, tu cache la fenêtre.
Dernière chose , le respect et le lechbotisme sont deux choses différente, en programmation le respect c'est quelque chose que tu aperçois par une façon de programmer et une patience a aider ce qui ne comprenne pas, le lechbotisme , c'est flater par interet, hors moi jai simplement fai la remarque que tu devrai avoir plus de modestie quand tu conseil car tu n'est qu'un petit programmeur ...
derniere chose, je programme deja en .NET et c'est un langage magnifique, simplement parfois on a besoin doptimisation des traitement ...

Kan meme a ton age traiter les gens de leche bot ... sa releve de la mentalité de primaire ... surtout que lécher les botte sur un forum, faut vraiment etre seul ... ne me rabaisse pas a ton niveau .
cs_Melnofil Messages postés 71 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 1 février 2008
13 mai 2008 à 13:19
"il y a aussi d'excellent développeur (...) comme brunews par exemple ..." <== Chercherais-tu à t'attirer les bonnes grâces de tes Dieux en leur léchant les pieds ? =^.^=

Bon trêve de plaisanterie, parlons plus sérieusement :
Imagine que ton ordinateur soit en train d'effectuer un lourd traitement dans un autre programme, la fonction GetConsoleHwnd() ci-dessus n'est pas unaire comme un write() donc la main peu très bien être rendue au système entre les deux appels à SetConsoleTitle(), ce qui fait que l'utilisateur voit passer le titre temporaire de la console. Même si le temps d'affichage bizarre n'est de l'ordre que d'un dixième de seconde, ce n'est pas le genre de truc que l'utilisateur lambda souhaite voir >_<

Ps 1 : Tularis étant donné que tu m'a l'air adepte des "techniques" de programmation Microsoft je te conseil de passer au framework .NET comme ça tu n'auras plus a utiliser ces vieilles "techniques" dans tes applications... (En tout cas pas celle mentionnée ci-dessus)

Ps 2 : Va expliquer à un g33k sous Linux que ton programme va lui masquer sa console customisée faite avec amour au démarrage, sans lui demander son avis. Un programme bien fait laisse l'ordinateur dans l'état où il l'a trouvé quand il se referme.
tularis Messages postés 21 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 12 juillet 2009
10 mai 2008 à 12:18
Toujours autant a la masse ce bon vieux melnofil ^^
Merci pour la source, même si c'est du recopier c'est toujours simpa de le mettre a dispos sur des site français ...,
Personnellement j'utilise un programme qui utilise fenetre et console, ce code m'est donc très utile ... j'aprecie l'economie de travail que tu ma fourni ...
En tous cas Melnofil je n'aurai jamais du faire de généralité sur les développeur de codes sources, en effet il y a beaucoup de code baclé ou meme pas finis, mais il y a aussi d'excellent développeur, inspire toi d'eux ... t'en a besoin ...
comme brunews par exemple ...
cs_Melnofil Messages postés 71 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 1 février 2008
20 juil. 2006 à 04:47
TamateaRaust : As-tu tenté un "ShowWindow(hConsole, SW_SHOW);" ? (je ne pense pas :-p)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/WindowsUserInterface/Windowing/Windows/WindowReference/WindowFunctions/ShowWindow.asp
Pratique certes mais c'est de la bidouille !

Déjà cette fonction est-elle bien nécessaire ?
- Soit votre programme est fait pour être lancé en mode console qui reste ouverte dans ce cas le problème ne se pose pas.
- Soit votre programme est en pur fenetré, dans ce cas là utilisez plutôt un projet Windows au lieu de DOS et il n'y aura pas de console.
- Soit votre programme est un hybride par exemple un programme en tâche de fond ou pour que le code source soit compilable avec linux/mac... seuls des cas particuliers de ce genre justifiront cette guerre contre la console.

Si vous voulez vraiment pouvoir manipuler librement une console (style pour la passer en traybar sans bidouillages ou tout simplement la rendre moins moche), il est plus souple (et pas vraiment plus compliqué) de la construire directement vous-même comme beaucoups de logiciel commerciaux le font.

L'interêt principal de l'appel à FreeConsole() dans les programmes DOS est de rendre votre application non-modale http://fr.wikipedia.org/wiki/Fen%C3%AAtre_modale . Un programme lancé en DOS bloque la session DOS tant que FreeConsole() n'est pas appelé. Après tout si votre programme n'est pas fait pour être lancé en ligne de commande vous devriez être en train d'écrire un programme Windows et non DOS.

Si vous préférez garder la console de base mais passer en non-modale, appelez successivement FreeConsole() et AllocConsole() au début du main() pour détacher le processus de la console appelante et en créer une nouvelle spécialement dédiée à cette application.

Si vous êtes joueur, sachez qu'on est cencé pouvoir faire ce qu'on veux des flux standards (les trucs qui défilent sur la console justement) par exemple à l'aide de "SetStdHandle" ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setstdhandle.asp ), voir meme encore plus bourrin avec une redéfinition de macros du style :
#ifdef stderr
#undef stderr
#endif
#define stderr (...)
/* N'oubliez pas de toujours fermer les flux dans un bloc finally ou dans un destructeur d'objet */

Voilà j'espère avoir convaincu quelques personnes de ne pas utiliser GetConsoleHwnd() et d'avoir donné assez de pistes pour l'éviter plus proprement ;-)
TamateaRaust Messages postés 2 Date d'inscription lundi 10 juillet 2006 Statut Membre Dernière intervention 13 juillet 2006
13 juil. 2006 à 13:45
Ce code est vraiment pratique.
Hélas une fois que la fenêtre est caché, il n'y a plus aucun moyen d'y accéder. Serait-il possible d'avoir une icone dans le systray pour afficher ou cacher la console DOS ?
Quelqu'un pourrait-il m'indiquer les modifications à apporter pour que cela soit possible ?
cs_Melnofil Messages postés 71 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 1 février 2008
5 juin 2006 à 02:07
cs_Melnofil Messages postés 71 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 1 février 2008
5 juin 2006 à 02:05
Copier les bidouilles des mecs de chez Micro$oft c le mal !

Utilisez plutôt la fonction FreeConsole();
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setconsoletitle.asp

Ps : kod32 tu t'es gourré dans ton code, la variable "hConsole" doit être déclarée du type HWND au lieu de HANDLE et il n'est pas nécessaire de la déclarer en globale.
Choumoumou Messages postés 162 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 17 novembre 2010
27 avril 2006 à 23:21
Génial !
Ça m'aide énormément !
Merci pour cette source !
@+ !
Steph115 Messages postés 163 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 3 février 2012
18 août 2004 à 00:34
Merci de ton aide

@++
DarkBoss Messages postés 154 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 12 décembre 2008
17 août 2004 à 19:54
Il faut simplement que tu remplace :

ShowWindow(hConsole, SW_HIDE);

par:

ShowWindow((HWND)hConsole, SW_HIDE);

et voila ca marche now !
Steph115 Messages postés 163 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 3 février 2012
23 juil. 2004 à 15:15
Salut je suis sur visual C++ 6.0 et quand je compile j'obtient ceci :
error C2664: 'ShowWindow' : cannot convert parameter 1 from 'void *' to 'struct HWND__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast

Merci de repondre si vous savez comment l'enlever.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
13 mai 2004 à 21:30
ok
kod32 Messages postés 46 Date d'inscription mercredi 5 mai 2004 Statut Membre Dernière intervention 13 novembre 2004
13 mai 2004 à 21:25
parcequ'avec Dev-C++, j'ai exactement le meme prob qd je lance une commande au serveur : une fenetre console s'ouvre et se ferme. J'avais besoin d'un code explicite...
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
13 mai 2004 à 21:22
si tu ve une appli sans fenetre, pourquoi tu fait pas une appli win32 sans créer de fenetre?