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
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 ...
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.
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 ;)
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...
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 ...
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.
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 ?
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...
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.