Rediriger l'invite de commande dans une zone de texte
Rediriger l'invite de commande dans une zone de texte
Bonjour,
J'aimerais pouvoir "détourner" l'affichage d'un programme en invite de commande vers une zone de texte au sein d'une interface.
Ce que je cherche n'a l'air d'exister comme je l'imagine. En effet, j'ai déjà vu des codes mais il faisait tout un tas de "doublons" de lignes (alors qu'un seule caractère changeait sur une ligne)
En gros, je ne veut pas le stdout tout bête mais le "vraie affichage" que reçoit l'invite de commande. Je ne sais pas si je suis clair lol
D'avance, merci à ceux qui m'aiderons (et qui me comprendrons ^^)
J'aimerais pouvoir "détourner" l'affichage d'un programme en invite de commande vers une zone de texte au sein d'une interface.
Ce que je cherche n'a l'air d'exister comme je l'imagine. En effet, j'ai déjà vu des codes mais il faisait tout un tas de "doublons" de lignes (alors qu'un seule caractère changeait sur une ligne)
En gros, je ne veut pas le stdout tout bête mais le "vraie affichage" que reçoit l'invite de commande. Je ne sais pas si je suis clair lol
D'avance, merci à ceux qui m'aiderons (et qui me comprendrons ^^)
.:NY152:.
Re: Rediriger l'invite de commande dans une zone de texte
Bonjour NY152,
Peut-tu donner un exemple de commande ou de programme dont tu veux détourner l'affichage.
Peut-tu donner un exemple de commande ou de programme dont tu veux détourner l'affichage.
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Rediriger l'invite de commande dans une zone de texte
Voyons si j'ai compris : Tu souhaites exécuter depuis un code PureBasic une commande comme ping x.x.x.x et voir le résultat dans un gadget de ta fenêtre ?NY152 a écrit :(et qui me comprendrons ^^)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Rediriger l'invite de commande dans une zone de texte
Si j'ai bien compris, ce que tu veux faire c'est quelque chose qui fonctionne comme le système Caveman qui existe dans Take Command (excellent shell, successeur de 4Dos) de jpsoft (enfin jusqu'à la v8)
When Caveman is running in TC, it continually scans the console window and updates the TC window with any changes it finds. It also sends keystrokes from the TC window to the console window. Caveman makes a character mode program appear to run in the TC window even though it is, in reality, running in the console session window.
Est-ce cela
Pour ceux qui ne connaissent pas TC (Take Command), c'est la version graphique de 4Dos (alias NDos) un shell étendu (suite de command.com et puis cmd.exe ou sh, bash etc sous Linux/Unix)
TC reprend toutes les fonctions et y ajoute un tas de commandes, mais pour pouvoir fonctionner entièrement en mode graphique, ils ont inventés un système qui capte ce que l'utilisateur tape, le réécrit sur la console graphique et capte les sorties "dos", car le shell prend aussi bien ses propres commandes que celles de l'OS hôte.
La doc est gigantesque et il faut la lire pour en tirer le meilleur, mais ça fait gagner un temps considérable.
Téléchargez la version 8.02 dans les archives pour tester (meilleure version, et elle marche encore sous Windows 10 x64)
https://jpsoft.com/all-downloads/previous-versions.html
When Caveman is running in TC, it continually scans the console window and updates the TC window with any changes it finds. It also sends keystrokes from the TC window to the console window. Caveman makes a character mode program appear to run in the TC window even though it is, in reality, running in the console session window.
Est-ce cela

Pour ceux qui ne connaissent pas TC (Take Command), c'est la version graphique de 4Dos (alias NDos) un shell étendu (suite de command.com et puis cmd.exe ou sh, bash etc sous Linux/Unix)
TC reprend toutes les fonctions et y ajoute un tas de commandes, mais pour pouvoir fonctionner entièrement en mode graphique, ils ont inventés un système qui capte ce que l'utilisateur tape, le réécrit sur la console graphique et capte les sorties "dos", car le shell prend aussi bien ses propres commandes que celles de l'OS hôte.
La doc est gigantesque et il faut la lire pour en tirer le meilleur, mais ça fait gagner un temps considérable.
Téléchargez la version 8.02 dans les archives pour tester (meilleure version, et elle marche encore sous Windows 10 x64)
https://jpsoft.com/all-downloads/previous-versions.html
Re: Rediriger l'invite de commande dans une zone de texte
Je préfère cette solution car elle préserve l'affichage (accents,...)
Code : Tout sélectionner
ClearClipboard()
program$ = "cmd.exe"
progr$ = "ipconfig.exe"
param$ = "/all"
parameter$ = "/c "+progr$+" "+param$+" 2>&1|clip"
rc = RunProgram(program$,parameter$,#Null$,#PB_Program_Wait)
Debug GetClipboardText()
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Rediriger l'invite de commande dans une zone de texte
J'avais besoin il y a pas longtemps de reporter l'affichage du pilotage en ligne de commande d'un EXE PhamtomJS qui permet de piloter à son tour en headless, un serveur HTTP
Je pensais aussi avoir vu ce genre de code et le trouver facilement et je n'ai pas trouvé une redirection exacte de la STDOUT
INFRATEC m'a gentillement dépanné
Cerise sur le kebab, ce code marche aussi avec la console CMD
Peut etre est, est-ce cela que tu cherches ?
http://www.purebasic.fr/english/viewtop ... 00#p481800
Je pensais aussi avoir vu ce genre de code et le trouver facilement et je n'ai pas trouvé une redirection exacte de la STDOUT
INFRATEC m'a gentillement dépanné

Cerise sur le kebab, ce code marche aussi avec la console CMD
Peut etre est, est-ce cela que tu cherches ?
http://www.purebasic.fr/english/viewtop ... 00#p481800
Re: Rediriger l'invite de commande dans une zone de texte
Désolé de ne répondre que maintenant mais je ne pouvais pas le faire avant ^^
la méthode du clipbord, même si elle est bonne a le seul défaut que je ne veut pas : des lignes doublons quand un programme affiche un pourcentage ou autre, dommage.
@Kwai chang caine le code a l'air bien mais la sortie est space : j'ai une police japonaise qui s'affiche lol Si tu sais d'où ça vient ...
@Spock même défaut que pour le code utilisant le clipboard
@Marc56 Je ne connais pas Take Command, je vais regarder à quoi ça ressemble et te confirmer ça ^^
@cage un exemple ? Un bon exemple serait d'avoir un chkdsk (version Win10) qui s'afficherait à l'identique, sans doublons ^^
J'espère avoir répondu à tout le monde lol
la méthode du clipbord, même si elle est bonne a le seul défaut que je ne veut pas : des lignes doublons quand un programme affiche un pourcentage ou autre, dommage.
@Kwai chang caine le code a l'air bien mais la sortie est space : j'ai une police japonaise qui s'affiche lol Si tu sais d'où ça vient ...
@Spock même défaut que pour le code utilisant le clipboard
@Marc56 Je ne connais pas Take Command, je vais regarder à quoi ça ressemble et te confirmer ça ^^
@cage un exemple ? Un bon exemple serait d'avoir un chkdsk (version Win10) qui s'afficherait à l'identique, sans doublons ^^
J'espère avoir répondu à tout le monde lol
.:NY152:.
Re: Rediriger l'invite de commande dans une zone de texte
Essais avec un programme envoyant un pourcentge, avec chkdsk pr exemple, tu verra ce que ça donne ^^Spock a écrit :pas compris ce que tu dis là !NY152 a écrit :la méthode du clipbord, même si elle est bonne a le seul défaut que je ne veut pas : des lignes doublons quand un programme affiche un pourcentage ou autre, dommage.
......
@Spock même défaut que pour le code utilisant le clipboard
.:NY152:.
Re: Rediriger l'invite de commande dans une zone de texte
+1Spock a écrit :excellent la redirection parCode : Tout sélectionner
2>&1|clip
Je ne sais pas par contre à partir de quelle version de Windows on a eut cette commande clip.exe ?
Re: Rediriger l'invite de commande dans une zone de texte
@KCC
Très sympa ce code, mais en unicode (sous W10 en tout cas) les accents apparaissent sous forme de caractères daubés et sans unicode ils n'apparaissent simplement pas. (j'ai essayé avec un ipconfig /all)
@NY152 je vois pas d’où tu sorts cette police asiatique
Enfin, j'ai essayé avec la commande checkdisk, je ne vois pas de soucis de doublon (par contre le soucis d'accent est bien là).
Quand tu dis doublon, tu veux dire que les résultats s'affichent ligne après ligne ? Si c'est ça ce n'est pas un soucis de doublon.
Très sympa ce code, mais en unicode (sous W10 en tout cas) les accents apparaissent sous forme de caractères daubés et sans unicode ils n'apparaissent simplement pas. (j'ai essayé avec un ipconfig /all)
@NY152 je vois pas d’où tu sorts cette police asiatique

Enfin, j'ai essayé avec la commande checkdisk, je ne vois pas de soucis de doublon (par contre le soucis d'accent est bien là).
Quand tu dis doublon, tu veux dire que les résultats s'affichent ligne après ligne ? Si c'est ça ce n'est pas un soucis de doublon.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Rediriger l'invite de commande dans une zone de texte
Je ne comprends pas trop où est le problème. Pars de l'exemple RunProgram() dans la documentation.
Doc de RunProgram()
Extrait :
Maintenant, au lieu de "requester" un message après signal de fin de programme,
tu modifies un EditorGadget() par ajout de texte (ce qui te permet aussi de gérer la saisie clavier).
Un ajout de texte (console>>interface) c'est :
WriteProgramStringN() pour remplacer le clavier de la console.
PS: Si tu vois de l'asiatique avec l'aide de KCC c'est que tu reçois du 8bits (UTF-8) et que tu affiches ça en 16 bits (Unicode).
Doc de RunProgram()
Extrait :
Code : Tout sélectionner
; Executes the PB compiler with the /? option and displays the output (windows version)
; For Linux/MacOS change the "/?" to "-h".
;
Compiler = RunProgram ( #PB_Compiler_Home +"/Compilers/pbcompiler", "/?", "", #PB_Program_Open | #PB_Program_Read )
Output$ = ""
If Compiler
While ProgramRunning(Compiler)
If AvailableProgramOutput(Compiler)
Output$ + ReadProgramString (Compiler) + Chr (13)
EndIf
Wend
Output$ + Chr (13) + Chr (13)
Output$ + "Exitcode: " + Str ( ProgramExitCode (Compiler))
CloseProgram(Compiler) ; Close the connection to the program
EndIf
MessageRequester("Output", Output$)
tu modifies un EditorGadget() par ajout de texte (ce qui te permet aussi de gérer la saisie clavier).
Un ajout de texte (console>>interface) c'est :
Code : Tout sélectionner
Texte$ = GetGadgetText(GadgetLambda)
Texte$ + ReadProgramString (Compiler) + ALaLigne$
SetGadgetText(GadgetLambda, Texte$)
PS: Si tu vois de l'asiatique avec l'aide de KCC c'est que tu reçois du 8bits (UTF-8) et que tu affiches ça en 16 bits (Unicode).
Re: Rediriger l'invite de commande dans une zone de texte
la commande clip.exe est apparue sous Windows Server 2003
disponible sous Vista, Seven, 8.x et 10 mais pas sous XP
l’exécutable clip.exe peut-être récupéré et copié dans XP si besoin ( dans %SytemRoot%\System32 )
disponible sous Vista, Seven, 8.x et 10 mais pas sous XP
l’exécutable clip.exe peut-être récupéré et copié dans XP si besoin ( dans %SytemRoot%\System32 )
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Rediriger l'invite de commande dans une zone de texte
J'ai essayé la commande chkdsk avec la méthode clip et cela fonctionne
J'ai coché la case Request Administrator mode for Windows Vista and above
et voici de résultat:
Code : Tout sélectionner
ClearClipboard()
program$ = "cmd.exe"
progr$ = "chkdsk.exe"
param$ = "d:"
parameter$ = "/c "+progr$+" "+param$+" 2>&1|clip"
rc = RunProgram(program$,parameter$,#Null$,#PB_Program_Wait)
Debug GetClipboardText()
et voici de résultat:
Le type du système de fichiers est NTFS.
Le nom de volume est Recover.
AVERTISSEMENT ! Le paramètre /F n'a pas été spécifié.
Exécution de CHKDSK en mode lecture seule.
Étape 1 : Examen de la structure du système de fichiers de base...
État d'avancement : 0 de 68864 effectué(s) ; Étape : 0% ; Total : 0% ; Heure de fin estimée : 0:03:20
État d'avancement : 5889 de 68864 effectué(s) ; Étape : 8% ; Total : 2% ; Heure de fin estimée : 0:03:15 .
État d'avancement : 19375 de 68864 effectué(s) ; Étape : 28% ; Total : 9% ; Heure de fin estimée : 0:03:02 ..
État d'avancement : 45313 de 68864 effectué(s) ; Étape : 65% ; Total : 22% ; Heure de fin estimée : 0:00:06 ...
État d'avancement : 68864 de 68864 effectué(s) ; Étape : 100% ; Total : 33% ; Heure de fin estimée : 0:00:04
68864 enregistrements de fichier traités. La vérification des fichiers est terminée.
État d'avancement : 3 de 3 effectué(s) ; Étape : 100% ; Total : 42% ; Heure de fin estimée : 0:00:04 .
3 enregistrements de grand fichier traités. État d'avancement : 0 de 0 effectué(s) ; Étape : 99% ; Total : 42% ; Heure de fin estimée : 0:00:04 ..
0 enregistrements de fichier incorrect traités.
Étape 2 : Examen de la liaison des noms de fichiers...
État d'avancement : 3181 de 74892 effectué(s) ; Étape : 4% ; Total : 44% ; Heure de fin estimée : 0:00:03 ...
État d'avancement : 37878 de 74892 effectué(s) ; Étape : 50% ; Total : 66% ; Heure de fin estimée : 0:00:01
État d'avancement : 69121 de 74892 effectué(s) ; Étape : 92% ; Total : 86% ; Heure de fin estimée : 0:00:01 .
État d'avancement : 69709 de 74892 effectué(s) ; Étape : 93% ; Total : 87% ; Heure de fin estimée : 0:00:01 ..
État d'avancement : 70048 de 74892 effectué(s) ; Étape : 93% ; Total : 88% ; Heure de fin estimée : 0:00:01 ...
État d'avancement : 70258 de 74892 effectué(s) ; Étape : 93% ; Total : 88% ; Heure de fin estimée : 0:00:01
État d'avancement : 70497 de 74892 effectué(s) ; Étape : 94% ; Total : 89% ; Heure de fin estimée : 0:00:01 .
État d'avancement : 70997 de 74892 effectué(s) ; Étape : 94% ; Total : 90% ; Heure de fin estimée : 0:00:01 ..
État d'avancement : 71584 de 74892 effectué(s) ; Étape : 95% ; Total : 91% ; Heure de fin estimée : 0:00:01 ...
État d'avancement : 71850 de 74892 effectué(s) ; Étape : 95% ; Total : 92% ; Heure de fin estimée : 0:00:01
État d'avancement : 74892 de 74892 effectué(s) ; Étape : 100% ; Total : 92% ; Heure de fin estimée : 0:00:01 .
74892 entrées d'index traitées. La vérification des index est terminée.
État d'avancement : 0 de 0 effectué(s) ; Étape : 99% ; Total : 92% ; Heure de fin estimée : 0:00:01 ..
0 fichiers non indexés analysés. État d'avancement : 0 de 0 effectué(s) ; Étape : 99% ; Total : 92% ; Heure de fin estimée : 0:00:01 ...
0 fichiers non indexés récupérés dans le répertoire des fichiers perdus et trouvés.
Étape 3 : Examen des descripteurs de sécurité...
La vérification des descripteurs de sécurité est terminée.
État d'avancement : 0 de 0 effectué(s) ; Étape : 100% ; Total : 99% ; Heure de fin estimée : 0:00:00
3015 fichiers de données traités. CHKDSK vérifie le journal USN...
État d'avancement : 996 de 996 effectué(s) ; Étape : 100% ; Total : 98% ; Heure de fin estimée : 0:00:00 .
8163568 octets USN traités. Vérification du journal USN terminée.
Windows a analysé le système de fichiers sans trouver de problème.
Aucune autre action n'est requise.
62908415 Ko d'espace disque au total.
17639936 Ko dans 18212 fichiers.
3736 Ko dans 3016 index.
0 Ko dans des secteurs défectueux.
144751 Ko utilisés par le système.
65536 Ko occupés par le fichier journal.
45119992 Ko disponibles sur le disque.
4096 octets dans chaque unité d'allocation.
15727103 unités d'allocation au total sur le disque.
11279998 unités d'allocation disponibles sur le disque.
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Rediriger l'invite de commande dans une zone de texte
pour plus d'informations sur la commande clip et bien d'autres:
http://www.purebasic.fr/french/viewtopi ... =4&t=15849
http://www.purebasic.fr/french/viewtopi ... =4&t=15849
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Rediriger l'invite de commande dans une zone de texte
Le pourcentage était un exemple voyons. Partons de l'exemple d'un encodage avec ffmpeg alors tout l'encodage n'est affiché que sur une seule et même ligne rafraîchie avec les informations en cours. Dès que tu veux traiter la sortie tu va te retrouver avec X fois la même ligne avec les infos. Ce que je veut c'est un affichage identique à la console. C'est tout à fait possible puisque Take Command le fait (@marc56 j'ai vérifié ^^), par contre est ce que Pure Basic sait le faire, aucune idée.Spock a écrit :pis au lieu d'utiliser le debugger (de PB ) (car celui de EPB permet l’affichage d'une sortie sur la meme ligne)
tu peux utiliser une petite interface avec un String gadget ... et ne faire afficher que ton pourcentage dedans
a partir du moment ou ça te renvoie chaque ligne de la console , tu peux filtrer ce que tu gardes ..
un minimum de code, et voila
.:NY152:.