IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

prb fenêtres console


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de meynaf
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Par défaut prb fenêtres console
    Bonjour,


    J'ai plein d'ennuis avec la console windows.
    (C'est bizarre, je m'attends à un ironique "non, t'es sûr ?" comme réponse ici...)

    Le but est d'avoir une fenêtre de console qui ne s'ouvre que si on s'en sert (c'est à dire dès sa 1ere utilisation, qui peut d'ailleurs ne jamais arriver).
    Pour ce faire, il ne faut pas utiliser une appli de type console, faute de quoi elle s'ouvrira, qu'on le veuille ou non.
    J'utilise donc AllocConsole, que je n'appelle qu'au moment voulu.

    Mais, si le programme a été lancé en ligne de commande, c'est à dire depuis cmd.exe, j'aimerais bien que ce soit dans cette fenêtre-ci que ça se passe.
    On peut faire ça ainsi : AttachConsole(ATTACH_PARENT_PROCESS).
    Et c'est là que tout part en sucette : le "prompt" revient dès que le programme est lancé, les sorties arrivent n'importe comment, et les entrées sont confondues avec des commandes tapées.

    D'autre part, impossible d'attraper correctement ni le ctrl-c, ni le clic sur la fermeture : c'est détectable, mais ça tue l'appli !
    Je n'ai pas non plus trouvé de truc pour afficher/effacer le curseur (enfin si, mais ça marche pas).
    Et je ne vous parle pas d'essayer d'avoir deux fenêtres de console en même temps...

    Avez-vous des solutions ?
    J'en viens à envisager sérieusement d'écrire mon propre système d'entrée-sortie texte avec une fenêtre ouverte à la main !

  2. #2
    Membre averti Avatar de meynaf
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Par défaut
    On dirait que ce sujet ne passionne pas les foules...

    J'ai en tous cas trouvé comment faire pour le curseur, certes le point le moins important du problème.
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // affiche/efface curseur console - val=0 efface, <>0 affiche
    void CslCurs(int show) {
    	static CONSOLE_CURSOR_INFO cci;
    	HANDLE hndl = GetStdHandle(STD_OUTPUT_HANDLE);
    	if (hndl == NULL || hndl == INVALID_HANDLE_VALUE) return;	// y a pas
    	BOOL retn = GetConsoleCursorInfo(hndl, &cci);
    	if (retn) {		// si info indisponible, ben on ne fait rien : cette fct n'est pas critique
    		cci.bVisible = show ? TRUE : FALSE;
    		retn = SetConsoleCursorInfo(hndl, &cci);
    		// retn sans importance ici en fait - on ne voit pas bien quoi faire en cas d'erreur...
    	}
    }

  3. #3
    Membre extrêmement actif
    Avatar de Madmac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    1 712
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 712
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par meynaf Voir le message
    On dirait que ce sujet ne passionne pas les foules...
    Au contraire, mais Microsoft n'a jamais été très généreux avec les informations sur la façon d'utiliser la console et sur la façon de lancer une application utilisant la console. Pour une raison qui m'est inconnu le démarrage prend un temps fou.

    Je visitais le forum microsoft pour tenté une solution à ce sujet.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 419
    Par défaut
    Il faut dire que Windows n'a jamais vraiment été prévu pour les programmes "hybrides" qui à la fois ont et n'ont pas une console. Le plus proche que Microsoft ait fait, c'est ILDASM, un programme console qui fait un FreeConsole() quand il est lancé sans paramètre.

    J'ai fait à une époque un programme qui ouvrait une console à la demande, mais c'était un programme graphique à la base, qui ne cherchait jamais à s'attacher à la console existante du parent. Et comme c'était à l'époque Windows 9x, j'ai été tellement mis en rogne par l'impossibilité d'attraper un CTRL_CLOSE_EVENT que j'ai fini par la remplacer par une fenêtre consolesque de mon cru.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti Avatar de meynaf
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Par défaut
    Si au moins on pouvait attraper sa "windows proc" pour traiter les messages à sa place. Mais même pas, ça ne tourne pas dans le même process.

  6. #6
    Membre actif
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Par défaut
    Citation Envoyé par meynaf Voir le message
    Si au moins on pouvait attraper sa "windows proc" pour traiter les messages à sa place.
    Si c'est faisable, tu peux utiliser une boucle de message et/ou définir
    ta propre fonction de capture des signaux console.
    (conf SetConsoleCtrlHandler() + HandlerRoutine callback )

    Citation Envoyé par meynaf Voir le message
    On peut faire ça ainsi : AttachConsole(ATTACH_PARENT_PROCESS).
    Et c'est là que tout part en sucette : le "prompt" revient dès que le programme est lancé, les sorties arrivent n'importe comment, et les entrées sont confondues avec des commandes tapées
    Normal, t'as construit ton programme comme étant une appli gui.
    Quand tu le lances depuis l'interpréteur cmd, ce dernier n'attend
    pas la fin de son exécution, d'où l'accès concourant à la console.
    Pour y remédier, il faut utiliser la commande start "" /wait pour
    forcer l'attente.

Discussions similaires

  1. [C] fonction system() et fenêtre console
    Par e-medi dans le forum Windows
    Réponses: 8
    Dernier message: 21/09/2007, 13h41
  2. Pourquoi fenêtre Console systématiquement à l'éxécution
    Par samdump dans le forum Code::Blocks
    Réponses: 4
    Dernier message: 11/10/2006, 10h09
  3. Fenêtre console qui ouvre toujours
    Par sawbo1 dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 23/05/2006, 21h27
  4. [DEBUTANT] Fenêtre console disparue.
    Par gc243 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 14/12/2004, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo