draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 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.
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 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.
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 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.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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...
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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...
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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...
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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...
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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...