begin process at 2012 02 11 22:57:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Exécution

 > EXECUTION DE COMMANDE ET ATTENTE DE FIN

EXECUTION DE COMMANDE ET ATTENTE DE FIN


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :28 906

Auteur : crenaud76

Ecrire un message privé
Commentaire sur cette source (30)
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



 Sources du même auteur

Source avec Zip Source avec une capture LILO : NOUVEAU LANGAGE DE PROGRAMMATION
FONCTIONS RÉSEAU DE BASE
Source avec Zip WMI BROWSER : UTILISATION DES CLASSES WMI
Source avec Zip SUPEROPTION
Source avec Zip EVALUER UNE EXPRESSION MATHÉMATIQUE

 Sources de la même categorie

Source avec Zip CALCULATRICE par TPB
Source avec Zip Source .NET (Dotnet) PIERRE PAPIER CISEAUX par Ultrabytes
Source avec Zip Source avec une capture UN PATCH EN VB (V3) par PhoenixBytes
Source avec Zip Source .NET (Dotnet) [VB.NET 2008] EXECUTION MULTITHREAD DE PLUSIEURS FONCTION À ... par ShadowTzu
Source avec Zip Source avec une capture MULTITHREADING ACTIVEX par Philippe734

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture UTILISER LES COMMANDES WINDOWS EN VB par Sechaud
Source avec Zip SPLASH SCREEN, SIMPLE ET COMPLEXE par bitshifter
Source avec Zip PLEASE WAIT...(USERCONTROL) par Exploreur
Source avec Zip SHELLANDWAIT - EXECUTER UNE APPLICATION, ATTENDRE LA FIN, ET... par Renfield
Source .NET (Dotnet) ATTENDRE UN CERTAINS TEMPS (PAUSE) SANS "PERDRE LA MAIN" EN ... par hvb

Commentaires et avis

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

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 !

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

Commentaire de Rrominet le 17/09/2003 23:57:51

Ha ouais command.com... ;-)

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 ;-}

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 !

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

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

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.

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.

Commentaire de NHenry le 20/02/2004 15:40:24 administrateur CS

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

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.

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

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!

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

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 >

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

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.

Commentaire de cbnet le 02/02/2005 16:48:19

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

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

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

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

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.

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?

Commentaire de ratala le 20/11/2005 15:57:22

Super, j'ai mis 10/10

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

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

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

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.

Commentaire de varaxor le 12/04/2011 17:58:22

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,295 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales