Afficher un texte dans invite de commande dos à partir du programme VB
zifnig
Messages postés69Date d'inscriptionvendredi 10 septembre 2004StatutMembreDernière intervention 4 mars 2013
-
24 févr. 2006 à 16:03
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 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 /?
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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és69Date d'inscriptionvendredi 10 septembre 2004StatutMembreDerniè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.
CTAC
Messages postés133Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention 8 juin 20125 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
zifnig
Messages postés69Date d'inscriptionvendredi 10 septembre 2004StatutMembreDerniè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...
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 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.