Capture du texte d'un programme dos par un pipe ...

Soyez le premier à donner votre avis sur cette source.

Vue 33 467 fois - Téléchargée 4 466 fois

Description

Je pense que beaucoup ont du imaginer pouvoir lancer un programme DOS et recevoir le texte dans leur programme VB plustot que dans le fenêtre dos ou pseudo DOS ...

Testé uniquement sous XP ... A voir pour les autres systèmes

Bonne prog à tous

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
52
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
29 avril 2015

Hum question bête, comment ouvrir le projet ?
Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
Non mon programme ne prends aucun paramètres.

J'ai fait un autre programme qui a les memes symptomes pour que des personnes puissent tester ;)

Prog en C (compilé abvec DMC)
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(int argc, char* argv[])
{
char c = 0;
while (c != 's')
{
c = _getch();

if (c == 's')
printf("Fin du programme.\n");
else
printf("Asc(c)=%d\n",c, (int)c);
}
return 0;
}
Fait Freezer MyDos.exe (killer le process dans le gestionnair des taches permet de sortir du freez)

Alors qu'un bête hello-world (avec un printf) s'affiche parfaitement dans MyDos.exe (même avec un while(1)printf("Try to catch me !!!");

cela valide la thèse du problème bloquant sur le stdInput mais je ne parviens pas a comprendre comment le corriger ...
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Désolé, je n'ai pas trop le temps de me replonger dans ce code, mais, si tu dois envoyer des commandes au démarrage, connais-tu ctte syntaxe purement batch :
C:\Tralala.exe <Commandes.txt
où Commandes.txt contient toutes les lignes envoyées au programme, par exemple, une ligne vide pour un Enter.
Seul bémol : ces commandes doivent être connues d'avances.
Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
pour poursuivre ma réflexion :
je crée un fichier batch "lancement.bat"
il contient:
PAUSE
PAUSE
PAUSE
EXIT

je lance MyDos.exe
je fait lancer un exe -> lancement.bat

le résultat est :
d:\Documents and Settings\ab84785\Bureau\from VBFRANCE>pause
Appuyez sur une touche pour continuer...

d:\Documents and Settings\ab84785\Bureau\from VBFRANCE>pause
Appuyez sur une touche pour continuer...

d:\Documents and Settings\ab84785\Bureau\from VBFRANCE>pause
Appuyez sur une touche pour continuer...

d:\Documents and Settings\ab84785\Bureau\from VBFRANCE>exit

ceci confirme donc le fait que le stdInput reçoit des choses que je ne maitrise pas ...
(et il se trouve que mon exe que à l'origine je souhaite catcher est assez sensible aux entrées)
j'ai tenté de corriger ce problème avec la création d'un nouveau pipe createpipe(hPL, hPE)
avant le createprocess je met le start.stdInput = hPL
apres le createprocess je fait closehandle hPL

et le résultat :
positif = c'est que en effet le premier pause reste bloqué
négatif = ma form est bloquée également ;)

Aurriez vous une idée a ce propos ?
Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
apres avoir bossé toute la nuit (sans grand succes malheureusement) j'ai pris un peu de repos et me revoici avec une question
J'ai l'impression qu'il y a un problème du côté du StdInput donné lors du createThread

Etant donné qu'on de spécifie pas le StdInput de la structure, faut-il considérer qu'on définit une StdInput=0 ?
Alors qu'est ce qui passe par ce canal ?

Je me demande si mon programme ne se mange pas des commandes qui le font planter.
Peut-on rediriger spécifiquement ce canal également ?

ps: il est fort probable que je n'ai pas compris l'intérêt du stdIntput...
Afficher les 59 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.