Texte en couleur dans une fenêtre MS DOS

lunnatick

Nouveau membre
Bonjour à tous, j’aimerai pouvoir mettre une couleur sur certain mots dans un batch pour que ses mots soit afficher d’une couleur différente du reste du texte dans une fenêtre MS DOS.
Exemple :

Sauvegarder le répertoire Application Data
Sauvegarder le répertoire Favoris

Y des gens ici qui savent comment je peut faire ?
Je ne souhait pas changer la couleur de tout le texte de mon batch, comme avec la commande « @color » qui se place en entête de batch, mais juste des mots clefs.
 

batchy

Grand Maître
pour ça faut charger ANSI.SYS, et ça ne marchera que sous 9x

après la commande pour mettre en couleur c'est ^C[COULm (le charactere ^C est en fait une fleche qui va en arrière, sous EDIT.com on la fait avec Control+P puis Control+C (d'ou la notation ^C)) et coul est un nombre qui définit un attribut de couleur
 

streetpc

Expert
Si c'est uiquement pour Windows tu peux utiliser la librairie Conio.
Je vais me faire fraper par les puristes, moi :p
 

lunnatick

Nouveau membre
Bonjour Anubis_ et merci pour ce lien.
N’auriez vous pas un exemple de code ?
Je ne comprend pas ce qu’il y a sur votre lien.

Bonjour streetpc et merci, pouriez vous m »en dire un peut plus sur cette librairie Conio ?
 

streetpc

Expert
t'es pas obligé de me vouvoyer :p

Conio est une librairie développée par Borland pour son C++ Builder. Elle donne accès à un certain nombre d'outils pour la console, entreautre changer la couleur d'avant et d'arrière plan, repositionner le curseur. Elle est très utilisée et a donc été portée sur d'autres compilateurs. Son équivalent (amélioré ?) sous linux est ncurses.
Elle ne fait pas partie de la librairie C standart, c'est pourquoi elle est dépréciée par les puristes...

un exemple d'utilisation de Conio en C/C++:

si tu utilise Dev-C++:

ou sans doute mieux http://conio.sourceforge.net/
 

lunnatick

Nouveau membre
Vous etes sur que je peux metre texte en couleur dans une fenêtre MS DOS avec sa ?
S"est du C++
 

streetpc

Expert
bien sûr que j'en sui sûr
à priori si il y a un exemple en C++, c'est que tu peux l'utiliser en C++ :o
 

lunnatick

Nouveau membre
Bionjour streetpc et merci encore.

Pouriez vous me dire comment je doit faire j'arrive pas a comprendre tout sa ?
 

streetpc

Expert
prendre un bon bouquin (ou un bon )sur le C ou le C++
et t'exercer, par exemple sur Dev-C++ (gratuit)

tu vouvoie tout le temps les gens sur un forum ? :)
 

zeb

Modérateur
Salut Lunnatick,

Je vais tenter de résumer les bonnes idées citées ci-dessus.

ANSI est une norme permettant sur différents systèmes d'utiliser des caractères d'échappement identiques (Invisible mais ayant un sens pour la console).

Pour l'utiliser sous DOS et/ou sous Windows, il faut charger le pilote ANSI.SYS. Ceci se fait par la commande
Code:
DEVICE=C:\WINDOWS\SYSTEM32\ANSI.SYS
qu'il faut ajouter au fichier C:\CONFIG.SYS Attention, c'est à toi de vérifier que le chemin est bon. A partir de là, les séquences d'échappement pourront être utilisées sur ton système.

Ex: Pour mettre en gras, c'est la fonction m, de paramètre 1 . Pour revenir à la normale, c'est le paramètre 0. L'échappement se fait grâce aux caractères <ESC>[. (Et pas control+P control+C, hein batchy !). En résumé :
Code:
ECHO <ESC>[1mSALUT<ESC>[0m
devrait saluer en gras et revenir au mode normal !

Ton exemple Sauvegarder le répertoire Favoris devient :
Code:
ECHO Sauvegarder le répertoire <ESC>[31mFavoris<ESC>[0m
31 est le code pour le rouge (cf. le lien d'Anubis)

Le caractère <ESC> est le caractère n°27. Il s'écrit 033 en octal ou 0x1B en hexadécimal.

Et voilà, tu peux maintenant tout afficher.

Si tu ne peux pas ajouter le pilote dans le CONFIG.SYS, il te reste la possibilité de programmer toi-même une fonction ECHO. Le plus simple est de créer un petit programme en C en appelant les fonctions de CONIO.H

Mais avant, il te faudra te lancer dans l'apprentissage du C/C++.

Bon courage.
 

batchy

Grand Maître
[fixed]ESC is the 1 byte code for escape.

* In ASCII, ESC is 27 decimal or 1B hexadecimal.
* In QBASIC, the code for escape is CHR$(27).
* At the command line using PROMPT, the escape code is $e[/fixed]sous edit.com pour le faire le char <ESC> il faut faire Ctrl+P puis Ctrl+C, ou alors Ctrl+P puis Echap
 

Zyzomis

Nouveau membre
Bonjour !

Je compose en QBASIC un logiciel qui va chercher un fichier sur un serveur FTP. Pour cela, j'utilise la commande FTP de l'interface MS-DOS. Mais hélas, j'ai beau mettre "Color 0,0" (texte noir sur fond noir) la commande affiche toujours en gris sur noir le login et le mot de passe du FTP !

Comment pourrai-je faire pour ne plus voir ces commandes ? J'avais donc pensé les afficher en noir sur noir grâce à une commande SHELL mais je ne sais pas comment faire. J'ai essayé SHELL "PROMPT $e[31m" pour mettre le texte en rouge mais même cette commande simple n'a pas fonctionné !

Qui peut m'aider ?? Merci d'avance !
 

batchy

Grand Maître
redirige plutot ta commande vers le périph virtuel 'nul' :

ftp --ta-ligne-de-commande > nul
 

Zyzomis

Nouveau membre
Heum.. Je ne vois pas trop comment rediriger ça... Voici un extrait de mon code pour t'aider à comprendre le fonctionnement :

[cpp]' Je crée un fichier comprenant la procédure à suivre
OPEN "ftp.tmp" FOR OUTPUT AS #1
PRINT #1, "USER monlogin monpass"
PRINT #1, "ASCII"
PRINT #1, "GET FICHIER.TXT"
PRINT #1, "bye"
CLOSE #1
' J'utilise la commande FTP qui exécute le fichier de procédure auprès du serveur indiqué en fin de ligne
SHELL "FTP -v -n -s:ftp.tmp serveur.ftp.com"[/cpp]

Donc là, ça affiche exactement les 4 commandes ci-dessus avec le prompt FTP> devant. Comment les masquer ? Mon idée de départ était d'écrire en noir sur noir, mais il y a peut-être une meilleure solution ?

Merci d'avance à toi, Batchy, et aussi aux autres qui pourront contribuer à faire avancer mon problème.
 

batchy

Grand Maître
redirige ta commande ...
[cpp]' Je crée un fichier comprenant la procédure à suivre
OPEN "ftp.tmp" FOR OUTPUT AS #1
PRINT #1, "USER monlogin monpass"
PRINT #1, "ASCII"
PRINT #1, "GET FICHIER.TXT"
PRINT #1, "bye"
CLOSE #1
' on fait la redirection à l'interieur de la commande shell
SHELL "FTP -v -n -s:ftp.tmp serveur.ftp.com > nul" [/cpp]
 

Zyzomis

Nouveau membre
[cpp]
SHELL "FTP -v -n -s:ftp.tmp serveur.ftp.com > nul" [/cpp]
Enfer et damnation !

Dans l'invite de commande, ça marche très bien... Sous QBasic ça ne marche pas ! :-S
Cela m'affiche toujours les 4 commandes lors de l'exécution de mon programme ! Scrogneugneu !
 

zeb

Modérateur
Plutôt que du QBASIC, essaie un script shell. En MSDOS, ça se dit BATCH et ça fait :
Code:
@ECHO OFF
ECHO USER tonlogin tonpass >  ftp.tmp
ECHO ASCII                 >> ftp.tmp
ECHO GET FICHIER.TXT       >> ftp.tmp
ECHO BYE                   >> ftp.tmp
FTP -v -n -s:ftp.tmp serveur.ftp.com > NUL
DEL ftp.tmp
 

Zyzomis

Nouveau membre
Plutôt que du QBASIC, essaie un script shell. En MSDOS, ça se dit BATCH et ça fait :
Code:
@ECHO OFF
ECHO USER tonlogin tonpass >  ftp.tmp
ECHO ASCII                 >> ftp.tmp
ECHO GET FICHIER.TXT       >> ftp.tmp
ECHO BYE                   >> ftp.tmp
FTP -v -n -s:ftp.tmp serveur.ftp.com > NUL
DEL ftp.tmp
Alors... faire un .BAT et l'exécuter par la commande SHELL "GOFTP.BAT" m'affichait toujours les commandes à l'écran. J'ai trouvé une parade un peu tordue, mais bon...

J'ai créé un exécutable sous RapidQ contenant uniquement PRINT "PATIENTEZ" : SHELL "COMMFTP.BAT"
Mon programme en QBasic crée un fichier COMMFTP.BAT contenant le texte ci-dessus (qui fonctionne parfaitement HORS du QBasic, merci Zeb !!) puis il lance la commande SHELL "GOFTP.EXE".
L'exécutable se lance, il affiche "PATIENTEZ" et les opérations s'effectuent de façon tout à fait transparente.

Alors oui, c'est tordu, mais l'important c'est d'y arriver !

Merci à Zeb et Batchy pour votre aide.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 098
Membres
1 586 287
Dernier membre
lucilleguffey
Partager cette page
Haut