ToToLeMalin
Messages postés8Date d'inscriptionjeudi 10 juillet 2003StatutMembreDernière intervention14 novembre 2005
-
20 août 2003 à 17:13
Proger
Messages postés248Date d'inscriptionvendredi 10 novembre 2000StatutMembreDernière intervention19 décembre 2008
-
1 sept. 2003 à 23:33
Salut,
Si un developpeur qui passe par la détient la solution, il est le bienvenu et qu'il n'hésite pas a gribouiller quelques lignes d'explication, IoI, ;-)
J'explique, je voudrai lancer une commande Dos, AT, qui me liste les taches planifiées, mais je voudrai récuperer le resultat de cette commande pour l'afficher dans une liste box,
Si cela n'est pas faisable, peut on ouvrir une fenetre Dos au sein d'une feuille VB,
La finalité est l'affichage sur une feuille VB dans un controle ou une listeBox ou autre... du resultat de la commande Dos:
AT
cs_DeathAngel
Messages postés117Date d'inscriptionvendredi 12 avril 2002StatutMembreDernière intervention13 avril 2007 20 août 2003 à 18:09
Hello,
Je pense avoir trouvé la méthode, mais il y a un bug.
Voilà déjà l'idée :
strCommande = "at > D:\test.log"
h = Shell(commande, vbHide)
i = FreeFile
Open "D:\test.log" For Input As #i
While Not EOF(i)
Line Input #i, strTemp
List1.AddItem strTemp
Wend
Close #i
tu lances un shell sur ta commande et tu stockes la sortie dans un fichier log
Puis tu ouvres le fichier log et tu mets chaque ligne du fichier dans ta liste.
Le bug que j'ai se produit sur le shell.
Ce qui est marrant, c'est que la même commande sous DOS fonctionne bien.
Je creuse le pbm, mais en tout cas, l'idée est là.
RicoNuch
Messages postés140Date d'inscriptionmercredi 18 juin 2003StatutMembreDernière intervention16 décembre 2006 20 août 2003 à 18:10
Hello !
Je crois bien que j'ai une petite idée pour arriver à ça.
Tu peux faire exécuter un projet VB avec une ligne de commande. Je viens d'expérimenter. Pour cela, j'ai créé un simplissime exécutable nommé "Projet1.exe" qui ne contient que 3 lignes :
Private Sub Form_Load()
MsgBox Command
End Sub
Puis j'ai ouvert une fenêtre DOS et j'ai tapé :
C:\ Projet1.exe "Essai"
Et j'ai immédiatement vu la MessageBox contenant le texte "Essai" s'afficher.
Sur ce modèle, tu peux envoyer une ligne de commande à un exécutable qui te l'affichera de la façon dont tu lui demanderas.
cs_DeathAngel
Messages postés117Date d'inscriptionvendredi 12 avril 2002StatutMembreDernière intervention13 avril 2007 20 août 2003 à 18:42
Bon, je viens de faire un test, je crois que c'est bon :
Tu crée un fichier .BAT (disons toto.bat par ex) avec ces 2 lignes
@echo off
at > d:\test.log
puis, dans ton appli vb, tu fais:
strCommande = "d:\toto.bat"
h = Shell(strCommande, vbHide)
i = FreeFile
Open "D:\test.log" For Input As #i
While Not EOF(i)
Line Input #i, strTemp
List1.AddItem strTemp
Wend
Close #i
Là, plus de bug ^_^
Enfin, je sais toujours pas pourquoi ça plantait.
Si y'en a qui savent...
Dernière chose, la restitution des caractères n'est pas top
(accents et caractères spéciaux dans les choux)
Mais bon, en creusant un peu tu dois pouvoir t'en sortir ^_^
@peluche
DA
Vous n’avez pas trouvé la réponse que vous recherchez ?
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 21 août 2003 à 01:57
ATTENTION !! SI le At est un peu long a faire son job, ca va planter car tu vas accèder au ficheir sur ton Open alors que le BAT sera encore en train d'écrire dessus.
Si tu veux avoir les commande AT, utilise l'API NetScheduleJobEnum(), Ca va meme a travers le réseau si tu veux ...
cs_DeathAngel
Messages postés117Date d'inscriptionvendredi 12 avril 2002StatutMembreDernière intervention13 avril 2007 21 août 2003 à 07:17
Hello,
Bon, je suis matinal aujourd'hui ^_^
Christophe a trouvé la solution.
Mais dis moi christophe, tu l'as trouvée dans quelle API cette fonction, Win32 ?
Parce que je l'ai pas trouvée dans mon bouquin
Petite correction sur mon code (au cas où ça interresserait du monde :
Après l'appel au shell, il est en effet plus que conseillé de mettre un WaitForTerm (API32).
Petite faute de ma part (quand on veut aller trop vite ^_^)
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 21 août 2003 à 09:38
Ben pour les API, je bosse avec les logiciel "APIViewer" et "API-Guide" : Une vrai mine d'or d'infos sur les API. Et avec MSDN bien sûr !! Avec ce trio d'enfer, tu trouves pour ainsi dire tout ce que tu veux sur les API. Je l'ai déja dit dans ce forum, mais je le redit :
NE TRAVAILLER JAMAIS AVEC LA VISIONNEUSE D'API FOURNIE AVEC VB !!!!!! LES DECLARATIONS QUI SONT DEDANS DATENT DE L'EPOQUE OU Win95 A ETE SORTIE, DONC IL Y A PLEIN DE MANQUE DEDANS ET DES TRUCS INCOMPATIBLES AVEC NOS Windows D'AUJOURD'HUI !!!!!!!!!!!!!!!
Christophe R.
Proger
Messages postés248Date d'inscriptionvendredi 10 novembre 2000StatutMembreDernière intervention19 décembre 2008 1 sept. 2003 à 23:33
Il faut créer un pipe entre ton programme et la fenêtre DOS. Je sais pas si tu trouvera un code source sur le net, alors je te file ce dont je me suis servi dans un prog (sources non publié):
API :
CreatePipe() pour créer un pipe "universel"
CreateProcess() pour exécuter ton programme dos, avec ligne de commande, et utilisation du pipe !
demo : CreateProcess(EXEfile, EXEcommands, sec1, sec2, True, pclass, 0&, EXEbaseDir, sinfo, pinfo)
(sec1,sec2,pclass,sinfo,pinfo sont des Type préçis)
Tu attend que le process (le programme dos) s'arrête, par exemple en appelant régulièrement le process :
GetProcessVersion()demo : t GetProcessVersion(pinfo.dwProcessId) , si t 0 alors le process est terminé.
Ensuite ya plus qu'a lire le contenu du pipe :
PeekNamedPipe()
tu obtiens une jolie string, avec laquelle tu peux faire ce que tu veux.