Activex pour récupérer la sortie du dos

Soyez le premier à donner votre avis sur cette source.

Vue 20 863 fois - Téléchargée 2 138 fois

Description

Cet OCX permet d'exécuter une commande DOS grâce une fonction Excecute, et vous pouvez récupérer la sortie grâce à un évènement généré à la fin de l'éxecution de la commande (ReceiveOutput). Il est donc très simple d'obtenir dans une textbox le résultat d'une commande comme ipconfig, netstat etc...
Pour faire tout ça, je me suis inspiré du travail d'un gars et utilisé les API, je ne passe pas par des sauvegardes temporaires de fichiers textes.
@+

Conclusion :


L'OCX compilé devrait être fonctionnel pour tout le monde. Les sources sont en VB5 et sont normalement compatibles VB6. J'ai mis une petite démo sur l'utilisation de mon ActiveX.

Bugs connus :
- La sortie des vieilles commandes DOS ne rend pas toujours bien, par exemple il remplace des "é" par des virgules etc... On a le même problème quand on enregistre la sortie dans un fichier texte avec les redirections (>).
- Ne vous en servez pas pour exécuter des commandes windows (ex:notepad), ça crashe...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
8
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
15 septembre 2011
2
Salut,
En modifiant la function execute du controle de :
If Ret <> 1 Then
'Au cas ou la commande/fichier n'existe pas
RaiseEvent Error("Commande et/ou fichier inexistants.")
Exit Function
End If

en ça


If Ret <> 1 Then
'Au cas ou la commande/fichier n'existe pas
Ret& = CreateProcessA(0&, "cmd /c " & myCommand, SA, SA, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, Start, Proc)
If Ret <> 1 Then
RaiseEvent Error("Commande et/ou fichier inexistants.")
Exit Function
End If
End If

c'est parfait, ça permet d'executer les commande interne de cmd.exe comme dir, copy, ver, set ...
++
Messages postés
473
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015

En fait, ça bouffe de la mémoire quand tu fais comme l'exemple que je donne ici en late binding.
Si tu fais les liaisons dans le projet et que tu déclares tes variables correctement (early binding) ça rendra le système plus efficace (10 à 20x plus rapide) et infiniment plus economique (8x moins de mémoire pour chaque déclaration). Mais bien sûr moins efficace qu'un appel API
Messages postés
176
Date d'inscription
vendredi 29 octobre 2004
Statut
Membre
Dernière intervention
7 mars 2005

Je tiens à préciser à tous ceux qui n'aiment pas les ActiveX (pour des raisons de déploiement souvent), n'oubliez pas que vous pouvez le "convertir" en classe en moins de 5 min, histoire de l'intégrer directement dans votre projet...
Messages postés
176
Date d'inscription
vendredi 29 octobre 2004
Statut
Membre
Dernière intervention
7 mars 2005

Plus court à taper c'est vrai... mais je ne suis pas passé par la machine script comme dans ton exemple, on me l'a déjà reproché dans une précédente source "ça bouffe trop de mémoire, VB est déjà assez lent comme ça".
Mais merci pour ta solution, je vais la tester quand même !
@+
Messages postés
473
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015

On peut faire ça depuis windows 2000 de cette façon :
set wsshell = createobect("wscript.shell")
set exec = wsshell.exec("toto.com")

do
doevents
out = out & exec.stdout.readall
... 'traitements particuliers
while exec.statut=0

out = out & exec.stdout.readall

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.