Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXECUTION DE COMMANDE ET ATTENTE DE FIN


Information sur la source

Catégorie :Exécution Classé sous : shell, wait, synchrone, attente Niveau : Débutant Date de création : 17/09/2003 Date de mise à jour : 17/09/2003 09:03:42 Vu : 20 160

Note :
9,22 / 10 - par 18 personnes
9,22 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (29)
Ajouter un commentaire et/ou une note

Description

Le code ci-dessous permet d'executer un programme externe, un peu comme la fonction Shell(), mais la, le programme VB ne reprend la main que lorsque le programme externe lancé est fini ...
Placez ce code dans un module standard et utilisez la procédure ShellWait "..." depuis votre code.
Exemple : ShellWait "cmd.exe /c dir c:\*.*>c:\DirC.txt"

 

Source

  • Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  • Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
  • Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  • Private Const STILL_ACTIVE = &H103
  • Private Const PROCESS_QUERY_INFORMATION = &H400
  • Public Sub ShellWait(ByVal JobToDo As String)
  • Dim hProcess As Long, RetVal As Long
  • hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(JobToDo, vbMinimizedNoFocus))
  • Do
  • GetExitCodeProcess hProcess, RetVal
  • DoEvents
  • Sleep 100
  • Loop While RetVal = STILL_ACTIVE
  • End Sub
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Const STILL_ACTIVE = &H103
Private Const PROCESS_QUERY_INFORMATION = &H400

Public Sub ShellWait(ByVal JobToDo As String)
Dim hProcess As Long, RetVal As Long
    
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(JobToDo, vbMinimizedNoFocus))
    Do
        GetExitCodeProcess hProcess, RetVal
        DoEvents
        Sleep 100
    Loop While RetVal = STILL_ACTIVE
End Sub

Commentaires et avis

signaler à un administrateur
Commentaire de Rrominet le 17/09/2003 20:28:30

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 !!

signaler à un administrateur
Commentaire de rene38 le 17/09/2003 23:05:31

Pour Rrominet
Sous Win9x, il suffit de remplacer
cmd.exe  par  command.com
et ça marche !

signaler à un administrateur
Commentaire de crenaud76 le 17/09/2003 23:44:13

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 !!!

signaler à un administrateur
Commentaire de Rrominet le 17/09/2003 23:57:51

Ha ouais command.com... ;-)

signaler à un administrateur
Commentaire de AbriBus le 18/09/2003 09:34:12

crenaud> impec. Rien à dire, bonne utilisation des API, simple, efficace... NIKEL
Bon ben ca fera 12/10 ;-}

signaler à un administrateur
Commentaire de VVV le 18/09/2003 13:33:55

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 !

signaler à un administrateur
Commentaire de AbriBus le 18/09/2003 13:38:17

lol, ca s'execute deja en mode vbMinimizedNoFocus, que tu peux par la suite modifier en vbNormalFocus ou n'importe quoi d'autre

signaler à un administrateur
Commentaire de AbriBus le 18/09/2003 13:41:27

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

signaler à un administrateur
Commentaire de VVV le 18/09/2003 14:08:35

Ah d'accord... désolé je n'avais pas bien regardé.
Merci ! Et, donc, 12/10 :-) Bravo.

signaler à un administrateur
Commentaire de PROVB le 30/09/2003 15:42:50

Salut,

Fonction déja faite il y à longtemps, et de meilleur façon.
Va voir mes codes tu verras.

signaler à un administrateur
Commentaire de NHenry le 20/02/2004 15:40:24

Pour moi c'est util, g mis 8 car g ne savai pas comment faire et que ça fonctionne très bien.

signaler à un administrateur
Commentaire de patrick532 le 07/08/2004 11:30:22

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.

signaler à un administrateur
Commentaire de crenaud76 le 09/08/2004 08:58:02

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"""

signaler à un administrateur
Commentaire de SCOY le 05/11/2004 10:39:38

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!

signaler à un administrateur
Commentaire de crenaud76 le 05/11/2004 11:59:18

Peut-être es-tu sous Win9x plutot que sous NT ou XP. Auquel cas il faut remplacer le "Cmd.exe" par un "Command.com" ???

signaler à un administrateur
Commentaire de rene38 le 05/11/2004 13:05:08

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 >

signaler à un administrateur
Commentaire de SCOY le 05/11/2004 16:26:12

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""......
:-(

signaler à un administrateur
Commentaire de Sipat le 09/11/2004 09:58:36

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.

signaler à un administrateur
Commentaire de cbnet le 02/02/2005 16:48:19

tres bon code, mais sans etre mechant il y a quelques commentaires stupides... ;)

signaler à un administrateur
Commentaire de crenaud76 le 02/02/2005 23:19:26

" il y a quelques commentaires stupides" < Soit plus précis, je risquerai de me vexer !!

signaler à un administrateur
Commentaire de cbnet le 10/02/2005 20:24:22

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

signaler à un administrateur
Commentaire de bobjay le 16/07/2005 17:02:26

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 ^^

signaler à un administrateur
Commentaire de crenaud76 le 18/07/2005 08:12:19

bobjay < Merci ! Mais si ma femme passe par la, je vais avoir des problèmes !!!

Christophe R.

signaler à un administrateur
Commentaire de kazimir le 28/07/2005 21:12:18

je viens d'essayé ce bout de code, c'est vraiment pile poil ce que je cherchais.!!

j'ai mis 20, ca va?

signaler à un administrateur
Commentaire de ratala le 20/11/2005 15:57:22

Super, j'ai mis 10/10

signaler à un administrateur
Commentaire de ratala le 20/11/2005 19:33:50

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

signaler à un administrateur
Commentaire de surfman le 04/12/2005 10:28:56

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...

signaler à un administrateur
Commentaire de Praska le 27/10/2006 15:47:55

Merci beaucoup !
Ton code m'a sauvé la vie ...
Surtout par sa facilité d'intégration

signaler à un administrateur
Commentaire de gandalfkhorne le 20/11/2006 15:31:55

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.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Shellexecute pour un fichier UDL avec attente de fin de Shell [ par Fab2111 ] Est-ce que c'est possible?? Dans mon code il faut que je repere quand le fichier udl est ferme (fichier qui me permet de changer la connection a une B Shellexecute pour un fichier UDL avec attente de fin de Shell [ par Fab2111 ] Est-ce que c'est possible?? Dans mon code il faut que je repere quand le fichier udl est ferme (fichier qui me permet de changer la connection a une B Shellexecute pour un fichier UDL avec attente de fin de Shell [ par Fab2111 ] Est-ce que c'est possible?? Dans mon code il faut que je repere quand le fichier udl est ferme (fichier qui me permet de changer la connection a une B Attente de fin d'execution d'un setup lancé par "shell" [ par fjrmarco ] Bonjour à tous.Je suis à la recherche d'un script qui permette d'attendre la fin de l'execution d'un setup lancée par la commande shell.J'ai testé les Shell synchrone [ par toinou78 ] Bonjour,Je rencontre actuellement un probl&#232;me dans mon appli car j'enchaine 3 Shell de suite et d'apr&#232;s ce que je lis dans MSDN, Shell est a Shell en attente d'une reponse. [ par sandrine29 ] Bonjour,J'utilise l'excellent source de fredlynx, donc j'execute une commande ms-dos avec retour dans un textbox.Seulement, si la commande attend une Attente de fin d'une commande Shell [ par champi ] Rebonjour ...Un petit probleme a vous soumettre :comment attendre la fin d'une execution lancee via la commande Shell?Je m'explique: je lance avec la Fin d'une commande shell [ par champi ] Salut ...Un petit probleme a vous soumettre :comment attendre la fin d'une execution d'un programme externe lance via la commande Shell?Je m'explique: Fenêtre d'attente [ par seblomb ] Bonjour,J'ai fait un petit prog qui va chercher des données pour ensuite les traiter, etc...Ces données proviennent d'une disquette, et c'est là que m Shell !! :) [ par scoobydoos ] Salut,j'ai une ListBox avec des noms de fichiers ex : Alire.txt et je veux l'exécuter par un bouton avec shell et notepad. Sachant que le fichier est


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.