Shell processus de sortie standard de la lecture en Visual Basic 6
Tout d'abord, permettez-moi de dire que je ne suis pas un Visual Basic 6 expert...
Mon besoin est de:
- lancement à partir d'une VB6 code client un exeternal .exe fichier
- attendre la fin du processus et au cours de son exécution - lire les messages en provenance de sa sortie standard "à la volée" (afin que je puisse l'imprimer sur un texte déposé widget ou d'autres similaires).
Je me demande si c'est même possible de le faire en VB6...après une longue recherche sur Internet, je n'ai pas trouver quoi que ce soit. Trouvé beaucoup d'exemples d'utilisation de la Shell
fonction, mais il semble que de me forcer à lire le stdout tout à la fois lorsque le processus de l'exécution est terminée, mais je veux interroger le processus de "frais", les messages qu'ils seront disponibles.
Tout les fragments de code/suggestions/références sont vraiment appréciés.
Merci d'avance!
- Vous utilisez le mauvais outil pour ce travail. Le temps de mise à jour VB.NET ainsi, vous pouvez utiliser le Processus.BeginOutputReadLine().
- Je sais...(j'aimerais vraiment le faire en Java ou Python), Mais je suis forcé de le faire à l'aide de VB6, pour le moment.
- et claudio, Vous pourriez écrire une DLL dans VB.Net et de l'appeler à partir de VB6 via COM interop. En supposant que les contraintes extérieures le permettent.
Vous devez vous connecter pour publier un commentaire.
Utilisation
CreatePipe()
pour créer un canal anonyme que vous pouvez passer àCreateProcess()
.Vous pouvez ensuite lire à partir de cette pipe, comme l'exige (soit à l'aide de vote ou se chevauchent/async I/O.
Cela devrait vous donner assez d'informations pour trouver un bon exemple.
Vous pouvez toujours utiliser Méthode Exec de WshShell pour faire le travail.
Je préfère utiliser un home-grown API solution basée sur cExec.cls beaucoup plus simple que Bob Riemersma de contrôle de l'utilisateur (mais pas aussi polyvalent).
Vous pouvez également créer un fichier de commandes qui a toutes les commandes dont vous avez besoin pour exécuter, puis à partir de VB6 appeler le fichier de commandes par l'exécution de
une fois que vous exécuter, puis ouvrez
OutputFileName.txt
et vous allez trouver tous les messages et de sortie générés au cours du processus de traitement par lots. Vous pouvez le lire dans VB6 dans un simpleopen "filename" for input as #1
Notez également que si vous utilisez une double GreaterThan symboles, le fichier de sortie ne sera pas remplacé à chaque fois que le batch s'exécute. Au lieu de cela, il sera complété avec les nouvelles lignes de sortie.
Voici la fonction que vous voulez. L'exercice de la déclaration de l'API (CreatePipe, CreateProcessA, CloseHandle, etc), les types (PROCESS_INFORMATION, STARTUPINFO, SECURITY_ATTRIBUTES) les constantes (STARTF_USESTDHANDLES, STARF_USESHOWWINDOW, etc) sont laissés au lecteur.