Afficher un texte dans invite de commande dos à partir du programme VB

zifnig Messages postés 69 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 4 mars 2013 - 24 févr. 2006 à 16:03
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 - 14 mars 2006 à 14:56
Bonjour,

J'ai créé un programme récupérant les arguments de la ligne de commande afin de pouvoir le lancer en batch.

J'aimerais savoir comment afficher un texte dans invite de commande dos lors de l'exécution du programme pour informer l'utilisateur d'une erreur ou lui donner la liste des paramètres a entrer en ligne de commande s'il tape monprog.exe /?

Zifnig
http://zifnig.free.fr

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 févr. 2006 à 17:39
Salut
En VB, il n'est pas possible (à ma connaissance) d'écrire dans la fenêtre d'appel puisque, normalement, il n'y en a pas.
Par contre, tu peux faire une MsgBox avec ces infos :

Dans Ton Form_Load ou ta Sub Main :
Dim Temp As String
Temp = UCase(Trim(Command()))
If Temp = "/?" Then
MsgBox "/q mode silencieux" & vbCrLf & _
"/b mode bruyant (lol) ...", vbInformation, App.Title & " - Infos de lancement"
End If

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
zifnig Messages postés 69 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 4 mars 2013
24 févr. 2006 à 17:51
Le but est lors d'un appel via l'invite de commande windows, retourner un texte de la même manière que ce que tu obtiens en tapant par exemple format /?
Ceci pour ne pas arrêter le soft en cours de traitement avec l'affichage d'une msgbox.

Zifnig
http://zifnig.free.fr
CTAC Messages postés 133 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 8 juin 2012 5
24 févr. 2006 à 18:15
Bonjour,




Un petit exemple pour écrire dans une console.
Pour utiliser une console existante, utiliser AttachConsole, qui n'existe pas chez moi car Win98.

Private Declare Function AllocConsole& _
Lib "kernel32" _
()

Private Declare Function FreeConsole& _
Lib "kernel32" _
()

Private Declare Function SetConsoleTitle& _
Lib "kernel32" Alias "SetConsoleTitleA" _
(ByVal lpConsoleTitle$)

Private Declare Function GetStdHandle& _
Lib "kernel32" _
(ByVal nStdHandle&)

Private Declare Function WriteConsole& _
Lib "kernel32" Alias "WriteConsoleA" _
(ByVal hConsoleOutput&, ByRef lpBuffer As Any, ByVal nNumberOfCharsToWrite&, _
ByRef lpNumberOfCharsWritten&, ByRef lpReserved As Any)

Private Declare Function GetTickCount& _
Lib "kernel32" _
()

Sub Demo_AllocConsole()
Const STD_OUTPUT_HANDLE& = -11&
Dim Titre$, Texte$, I&
Titre = "Utilisation de AllocConsole"
Texte = "Un message pendant cinq secondes!"
If AllocConsole Then
SetConsoleTitle ByVal Titre
WriteConsole GetStdHandle(STD_OUTPUT_HANDLE), ByVal Texte, Len(Texte), I, 0&
I = GetTickCount
Do
Loop Until GetTickCount - I > 5000&
FreeConsole
Else
MsgBox "L'opération a échouée", vbCritical, Titre
End If
End Sub

ctac
zifnig Messages postés 69 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 4 mars 2013
28 févr. 2006 à 00:26
Merci ctac.

Mais le pb c'est qu'avec allocConsol(), on alloue une nouvelle fenêtre, on écrit donc pas dans la fenêtre dans laquelle on a lancé le soft.


J'ai eu beau chercher (j'ai essayé un GetSdtHandle sans allocConsol, mais sans effet), je ne vois pas. Ou peut être si on arrivait à récupérer le handle de la fenêtre de l'invite de commande...

Zifnig
http://zifnig.free.fr

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
14 mars 2006 à 14:56
Salut Zifnig,

j'ai déjà rencontré une similaire problématique, trop éloignée pour te fournir une solution toute faite, et suffisamment proche pour te donner une technique qui pourrait porter ses fruits, si tu peux faire quelques concessions fonctionnelles:

- apprend à ton appli VB à générer une trace en fichier texte (éventuellement nommé sur la base d'un argument reçu en ligne de commande).
- fabrique un batch qui peut traiter des arguments (tjrs pour le nom de la trace), qui lance ton appli VB, et qui scrute la trace (avec quelques flags de contrôle bien choisi).
- au lieu de lancer directement ton appli VB, lance le batch.

et DOS pas trop, ça use...

rvblogn
Rejoignez-nous