EXECUTION DE COMMANDE ET ATTENTE DE FIN

Rrominet Messages postés 133 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 24 novembre 2014 - 17 sept. 2003 à 20:28
varaxor Messages postés 1 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 12 avril 2011 - 12 avril 2011 à 17:58
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/8551-execution-de-commande-et-attente-de-fin

varaxor Messages postés 1 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 12 avril 2011
12 avril 2011 à 17:58
Juste une alternative sans passer par les API Windows :

Sub ShellAndWait(PathName As String, _
Optional WindowsStyle As VbAppWinStyle = vbMinimizedFocus)

Dim ShellCmdPath As String
Dim FileNumber As Long
Dim template As String
Dim i As Integer

' Generate a temporary filename
i = 0
Do
ShellCmdPath = Hex(i) & ".bat"
i = i + 1
Loop While Len(Dir(ShellCmdPath)) > 0

' Prepare batch file content
template = "@echo off" & vbCrLf

' Action to execute
template = template & PathName & vbCrLf

' Remove created batch file when action has been executed
template = template & "del " & ShellCmdPath

' Create batch file
FileNumber = FreeFile
Open ShellCmdPath For Output As #FileNumber
Print #FileNumber, template
Close #FileNumber

' Execute batch file containing action
Shell ShellCmdPath, WindowsStyle

' Wait for asynchronous command to finish
While Len(Dir(ShellCmdPath)) > 0
DoEvents
Wend
End Sub
gandalfkhorne Messages postés 70 Date d'inscription dimanche 11 janvier 2004 Statut Membre Dernière intervention 1 octobre 2004
20 nov. 2006 à 15:31
Chapeau pour ce petit bout de code, qui aurait pu être, et même du être, un argument Wait dans le Shell de base de VB.

Thx pour cela, et sinon je m'en sers dans une appli pour un controle de raccourci de Jeu.
(Tu clique le programme charge l'image cd et lance l'executable, en clair ton jeu démarre sans avoir besoin de faire d'opérations chiantes.Et dans cela il sert à protéger contre la double-execution du jeu par simple bascule)

Bonne continuation.
Praska Messages postés 1 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 27 octobre 2006
27 oct. 2006 à 15:47
Merci beaucoup !
Ton code m'a sauvé la vie ...
Surtout par sa facilité d'intégration
cs_surfman Messages postés 46 Date d'inscription samedi 1 mars 2003 Statut Membre Dernière intervention 16 septembre 2008
4 déc. 2005 à 10:28
Pas mal je m'en sers pour faire des mises à jours de mon logiciel sans que l'utilisateur puisse continuer à utiliser ou installer ou configurer le reste...
ratala Messages postés 248 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 22 juin 2008
20 nov. 2005 à 19:33
Super, c'est pratique moi je l'utilise comme sa :
do
doevents
shellwait "notepad.exe"
loop

Comme sa on peut pas fermer le bloc-note ...
Tres bonne source je met 10/10
ratala Messages postés 248 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 22 juin 2008
20 nov. 2005 à 15:57
Super, j'ai mis 10/10
cs_kazimir Messages postés 26 Date d'inscription mercredi 23 octobre 2002 Statut Membre Dernière intervention 4 novembre 2008
28 juil. 2005 à 21:12
je viens d'essayé ce bout de code, c'est vraiment pile poil ce que je cherchais.!!

j'ai mis 20, ca va?
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
18 juil. 2005 à 08:12
bobjay < Merci ! Mais si ma femme passe par la, je vais avoir des problèmes !!!

Christophe R.
bobjay Messages postés 66 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 1 avril 2007
16 juil. 2005 à 17:02
Ce code apporte enfin la solution à un vieux problème que j'avais, de plus il est court et fonctionne super bien. Crenaud76 je t'aime ^^
cbnet Messages postés 176 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 7 mars 2005
10 févr. 2005 à 20:24
pour te rassurer les commentaires stupides ne sont pas de toi ! En voici un par exemple "j'ai une erreur dans cmd.exe "'gt n'est pas reconnu comme commande interne ou externe" mais dans tous les cas c'est pas grave on a droit d'etre debutant, meme a ce point la... :D
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
2 févr. 2005 à 23:19
" il y a quelques commentaires stupides" < Soit plus précis, je risquerai de me vexer !!
cbnet Messages postés 176 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 7 mars 2005
2 févr. 2005 à 16:48
tres bon code, mais sans etre mechant il y a quelques commentaires stupides... ;)
cs_Sipat Messages postés 71 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 15 avril 2007
9 nov. 2004 à 09:58
Bonjour,
Un petit témoignage...
Sous XP PACK2 VBA Office 2003 et Win 98 SE avec MVBStudio.

ShellWait "Command.com /c dir /b /o-d c:\windows\*.txt > c:\liste.TXT"
' Mettre dans un fichier Liste.txt le non de tous les fichiers *.txt se trouvant dans le repertoire windows et les trier du plus recent au plus ancien.

ShellWait fonctionne trés bien. je m'en sert pour remplir une ListBox.
Merci.
SCOY Messages postés 43 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 12 avril 2005
5 nov. 2004 à 16:26
Salut,
Non je suis sous XP, j'ai éssayé de remplacé par :>, mais maintenant j'ai une erreur : ""c:\*.*:" n'est pas un périphérqiue reconnu.
Fichier introuvable""......
:-(
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
5 nov. 2004 à 13:05
Les mystères de l'affichage : dans la ligne
Exemple : ShellWait "cmd.exe /c dir c:\*.*>c:\DirC.txt"
Les 4 caractères > doivent être remplacés par un seul : le signe "est plus grand que"
J'essaie encore : le signe >
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
5 nov. 2004 à 11:59
Peut-être es-tu sous Win9x plutot que sous NT ou XP. Auquel cas il faut remplacer le "Cmd.exe" par un "Command.com" ???
SCOY Messages postés 43 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 12 avril 2005
5 nov. 2004 à 10:39
Salut,
Je suis très interresser par ta source!!
Je l'ai testée, mais j'ai une erreur dans cmd.exe "'gt n'est pas reconnu comme commande interne ou externe, un programme exécutable ou un fichier de commande"
Je suis un vrai débutant, donc j'ai fait un copier collé de ton code dans un module, et mis sur un bouton ShellWait "cmd.exe /c dir c:\*.*>C:\Docs\Norton.txt"
(J'ai creer un fichiers text avec le blocs note, contenant une commande pour lancer les parametres de norton internet "Norton.txt")
T'as une soluce?
Merci!
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
9 août 2004 à 08:58
Il y a plus simple que de concaténer avec un Chr(34). Tu peux tout simplement faire cela :

ShellWait "dir c:\>""c:\tmp\toto.txt"""
patrick532 Messages postés 40 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 20 avril 2009
7 août 2004 à 11:30
salut,
source très utile, merci.
je la trouve plus pratique que les prog de PROVB.
il est à noter toutefois qu'il faut faire attention à la syntaxe de la ligne de paramètres du style:
remplacer ShellWait "dir c:\>"c:\tmp\toto.txt""
par ShellWait "dir c:\>" & chr(34) "c:\tmp\toto.txt" & chr(34)
bonne continuation.
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 févr. 2004 à 15:40
Pour moi c'est util, g mis 8 car g ne savai pas comment faire et que ça fonctionne très bien.
PROVB Messages postés 10 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 19 août 2013
30 sept. 2003 à 15:42
Salut,

Fonction déja faite il y à longtemps, et de meilleur façon.
Va voir mes codes tu verras.
cs_VVV Messages postés 40 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 15 juin 2009
18 sept. 2003 à 14:08
Ah d'accord... désolé je n'avais pas bien regardé.
Merci ! Et, donc, 12/10 :-) Bravo.
cs_AbriBus Messages postés 492 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 25 avril 2007 5
18 sept. 2003 à 13:41
donc, pour que ca se voit pas ==>
Public Sub ShellWait(ByVal JobToDo As String)
Dim hProcess As Long, RetVal As Long

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(JobToDo, vbHide))
Do
GetExitCodeProcess hProcess, RetVal
DoEvents
Sleep 100
Loop While RetVal = STILL_ACTIVE
End Sub
cs_AbriBus Messages postés 492 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 25 avril 2007 5
18 sept. 2003 à 13:38
lol, ca s'execute deja en mode vbMinimizedNoFocus, que tu peux par la suite modifier en vbNormalFocus ou n'importe quoi d'autre
cs_VVV Messages postés 40 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 15 juin 2009
18 sept. 2003 à 13:33
Pas mal du tout ! Ca m'intéresse d'ailleurs très fort...
Pourrais-tu me dire s'il est possible d'exécuter une commande avec ton ShellWait dans une fenêtre "invisible" (du style shell Commande, vbhide).
Je te mets 8/10... et 10/10 si tu peux me répondre ;-)
Merci !
cs_AbriBus Messages postés 492 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 25 avril 2007 5
18 sept. 2003 à 09:34
crenaud> impec. Rien à dire, bonne utilisation des API, simple, efficace... NIKEL
Bon ben ca fera 12/10 ;-}
Rrominet Messages postés 133 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 24 novembre 2014 1
17 sept. 2003 à 23:57
Ha ouais command.com... ;-)
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
17 sept. 2003 à 23:44
Euhhh !! Vous avez pas tout compris la !! Ca ne sert pas qu'à lancer des commandes DOS !! Vous pouvez faire ShellWait "Winword.exe" si vous voulez, et le code ne reprendra qu'après la fermeture de Word !!
Alors excusez-moi si dans l'exemple je parlais de CMD.EXE mais je suis XP depuis un moment (et même NT 4.0 et même 3.51, avant) alors j'ai perdu le réflexe du "command.com" depuis !!!
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
17 sept. 2003 à 23:05
Pour Rrominet
Sous Win9x, il suffit de remplacer
cmd.exe par command.com
et ça marche !
Rrominet Messages postés 133 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 24 novembre 2014 1
17 sept. 2003 à 20:28
Ca peut pas être mal
Seul ennui, ça utilise une commande DOS, et surtout le CMD de 2k ou XP, donc sous Win95/98 (et NT ?) ça ne fonctionne pas...

Mais c'est simple d'utilisation, c'est l'avantage !!
Rejoignez-nous