Renvoyer du texte vers cmd

Résolu
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010 - 16 janv. 2007 à 21:00
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010 - 18 janv. 2007 à 17:27
Salut a tous,

Eh je cherche le moyen de renvoyer du texte dans la console cmd

Si je fais un WriteConsole sur le StdOutPut du ParentProcess je recoi l'erreur Parametre invalide :(
Une idée ?

 ++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...

21 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2007 à 17:23
http://www.vbfrance.com/code.aspx?ID=41156




Renfield





Admin CodeS-SourceS

- MVP Visual Basic
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 janv. 2007 à 09:40
j'ai mis a jour mon zip, avec un exemple.
http://www.vbfrance.com/code.aspx?ID=41156

j'ai mis une redirection, en plus.....
il ne faut pas utiliser WriteConsole, mais WriteFile, si on redirige la sortie.......

une source qui va, je pense t'intéresser :
http://vb.mvps.org/samples/project.asp?id=console

Renfield
Admin CodeS-SourceS- MVP Visual Basic
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
16 janv. 2007 à 21:09
Ouais...

Ton code d'une part...
et l'exposé clair du but à atteindre, d'autre part,
vaudront mille fois mieux que ce que tu dis dans ton message
0
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
16 janv. 2007 à 21:20
Je veux pouvoir renvoyer du texte dans une console cmd depuis un soft lancé par cmd
Pour ca je récupère le StdOutPut dans la structure SYSTEM_PARAMETERS du processus parent et puis je fais un WriteConsole sur ce StdOutPut.
Mais je recoi l'erreur parametre invalide...

Vu que mon code tien sur 4 modules et que je ne suis absolument pas certain que l'on puisse ecrire dans une console de cette facon, je prefere d'abord savoir si la methode est bonne et puis au besoin je mettrais le code voir si c'est pas une erreur de code.

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0

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

Posez votre question
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
16 janv. 2007 à 22:52
En .Net ca marche de cette manière en tout cas :

        Dim p As New Process()
        p.StartInfo.FileName = "ipconfig.exe"
        p.StartInfo.RedirectStandardInput = True
        p.StartInfo.RedirectStandardOutput = True
        p.StartInfo.UseShellExecute = False
        p.Start()
        Dim r As IO.StreamReader = p.StandardOutput
        MsgBox(r.ReadToEnd)

Je sais pas vraiment comment ca marche en VB6, mais tu remarqueras que pour que ca marche, le processus doit être lancé avec RedirectStandardIn/Outpu = True, y'a peut-être quelque chose dans le même esprit à faire en VB6 quand tu lance ton cmd ?
Sinon donne nous ton code, ce sera beaucoup plus facile pour nous de t'aider !
<hr size="2" width="100%" />Julien.
0
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
16 janv. 2007 à 23:40
Eh non en fait ce n'est pas mon soft qui lance cmd mais cmd qui lance mon soft
et mon soft doit ecrire dans la console de cmd

J'ai uploadé le code a cette adresse : http://systemzeb.free.fr/Soft/CmdTest.zip

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
17 janv. 2007 à 10:08
Ouaip,
(dsl j'ai pas vb6, donc je te dis à l'aveuglette...)
Essaye un peu de mettre Nothing, à la place du second "ByVal 0&" dans l'appel de WriteConsole, puisqu'il s'attend à un objet et non à un nombre, si ça ne change rien, c'est que c'est ton premier paramètre qui est incorrect, et la je ne sais rien faire pour toi, faut que tu revoie ton code...
<hr size="2" width="100%" />Julien.
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
17 janv. 2007 à 10:10
Héé mais attends, tu dis que tu fais WriteConsole sur le StdOutput, logiquement, ce serait plutot sur le StdInput que tu devrais écrire, non ?
Sinon un SendKeys ou même un keybd_event, ça ne va pas ?
<hr size="2" width="100%" />Julien.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2007 à 10:32
"ce serait plutot sur le StdInput que tu devrais écrire, non ?" .... euh, non, on ecrit pas sur le clavier ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2007 à 11:08
Tout "simple", en fait

Private Declare Function WriteConsole Lib "kernel32.dll" Alias "WriteConsoleA" (ByVal hConsoleOutput As Long, ByVal lpBuffer As String, ByVal nNumberOfCharsToWrite As Long, ByRef lpNumberOfCharsWritten As Long, ByRef lpReserved As Any) As Long
Private Const STD_OUTPUT_HANDLE As Long = -11&


Private Declare Function GetStdHandle Lib "kernel32.dll" (ByVal nStdHandle As Long) As Long


Private Sub Main()
Dim hConsole As Long
Dim sBuffer As String
    sBuffer = "Vous avez dit : " & Command$ & " ??"
    WriteConsole GetStdHandle(STD_OUTPUT_HANDLE), sBuffer, Len(sBuffer), ByVal 0&, ByVal 0&
End Sub

Ensuite, tu compile, et tu transforme ton executable en executable Console... grace au fichier MkConsole.exe
présent ici...

http://www.mvps.org/st-software/Code/all.zip

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
17 janv. 2007 à 13:06
Ca va te fous pas de moi hein !
En DotNet c'est Process.StandardInput.Write, je traduis comme je peux...

<hr size="2" width="100%" />Julien.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2007 à 13:16
"StandardInput" .... et beh, sympa DotNet :p

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
17 janv. 2007 à 19:10
Salut a tous,

Merci Renfield

Je ne savais pas qu'il fallait modifier le type de copilation, je pouvais tjs chercher...

Par contre au final j'ai toujours pas ce que je voulais, je faisais ca pour pouvoir recuperer le retour dans une variable depuis un batch, mais cette methode ecrit bien dans la console mais le resultat n'est pas "traitable"

As tu une idee de comment je pourrais faire pour renvoyer une valeur dans le 'buffer' de retour de cmd ?
Encore merci :)

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2007 à 19:16
l'API ExitProcess

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
17 janv. 2007 à 19:37
Eh oui mais ExitProcess ne permet que de renvoyer un long... (code d'erreur)
Ou puis je faire un truc genre ExitProcess StrPtr(MaVar) ?
Ou bien faire un VirtualAlloc puis faire ExitProcess hVirtual ?

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2007 à 21:34
j'avoue que je ne sais pas trop quoi répondre, tu voudrais mettre quoi, derrière ?

(ressemble a un Pipe, ton truc...)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
17 janv. 2007 à 21:46
Erf wai c'est pas tres clair dutout ce que j'ai dis la...

En fait je voudrais faire un executable genre ipconfig par exemple qui renvoi les info dans le Pipe de la console "mère"
De maniere a pouvoir l'utiliser dans un batch et recuperer le resultat dans une variable ou le rediriger en faisant "Commande >MonFichier.txt"

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2007 à 22:45
pas compris ou ca genait....

WriteConsole fait bien cela, non ?

et un > redirigera dans un fichier.... (GetStdHandle s'occupe de tout cela)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
17 janv. 2007 à 23:40
Eh bin non justement ca ne marche pas avec WriteConsole :(
A moins que le flag ne soit pas STD_OUTPUT_HANDLE
Je devrais peut etre en essayer d'autres pour voir...

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 janv. 2007 à 09:28
un article interessant :

http://vb.mvps.org/samples/project.asp?id=console

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Rejoignez-nous