Attendre la fin d'un process externe avant de faire autre chose

Soyez le premier à donner votre avis sur cette source.

Vue 7 944 fois - Téléchargée 397 fois

Description

Voila, j'avais besoin de tester si un log (wordpad dans mon exemple) n'était plus en exécution avant de faire d'autre trucs.
seulement, wordpad est lancé extérieurement à VB, donc ce qui est FindWindow & Co ne marchait pas...

j'ai donc mixé des ptites choses, et trifouillé dans mon cerveau, et voila....assez ptit, et simple d'utilisation...
étant débutant, il y auras surement moyen de l'améliorer, mais pour moi, il est nikel ;-)

Source / Exemple :


Imports System.IO

Public Class Form1
    Private Declare Function Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Long
	
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim pID As String 'Sert à stocker le PID de référence
        Dim pID2 As String 'Sert à stocker le PID de test
        Dim FoundProcess As Process

        If Label1.Text = 5 Then
            Try
                FoundProcess = Process.GetProcessesByName("Wordpad")(0)  ' on cherche un process nommé Wordpad
                Label5.Text = FoundProcess.Id.ToString()  ' on l'affiche dans le label5
            Catch Ex As Exception
                End   ' si on a pas trouvé le process Wordpad, bin on se casse :-p
            End Try
        End If

        pID = Label5.Text   ' Remplissage de la var pID
        pID2 = Label5.Text  ' Remplissage de la var pID2

        If Label1.Text = 3 Then
            While pID = pID2 ' Si pID et pID2 sont pareil
                Try
                    FoundProcess = Process.GetProcessesByName("Wordpad")(0)
                    pID2 = FoundProcess.Id.ToString()   ' si Wordpad est toujours en exécution, on rempli à nouveau pID2 avec son PID
                    Sleep(3000)  'attend 3sec entre chaque test
                Catch Ex As Exception
                    pID2 = 0  ' si Wordpad n'est plus en exécution, alors on rempli pID2 avec 0
                End Try
            End While
        End If

        If Label1.Text = 1 Then
			Timer1.Enabled = False
            MessageBox.show ("WordPad est fermé...")  'ptit message histoire de voir que mon script à vu que Wordpad était fermé :-D
			Timer1.Enabled = True
        End If

        If Label1.Text = 0 Then
            End  ' A++
        End If

        If Label1.Text > 0 Then
            Label1.Text = (Label1.Text - 1)  'faut bien descendre le compteur de 1 à chaque tour ;-)
        End If
    End Sub
End Class

Conclusion :


Voilà les gens, y a plus qu'à se servir ;-)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
7 mars 2009

oui, effectivement, un timer ou process devrait etre mieux, j'ai pas fait comme ça, car mon prog se met en minimisé en fait...
je corrige le code dès que j'ai 2min.
Merci pour ton com ;-)
Messages postés
234
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011
1
royaltaz, tu ne devrais pas utiliser un Sleep() ça fait freezer toute l'application ...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
FindWindow("WordPadClass", 0)
Messages postés
6
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
7 mars 2009

bin pas réussi à la faire marcher...
en tout cas, comme ici ;-)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
FindWindow() ne va pas pour un processus externe ???
Afficher les 7 commentaires

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.