Réponse acceptée !

Déjà une Maj

Un oublie DZL (ajout des fonctions AttendMort)
Module ModuleShell
'------------------------------------------------------------------------------
'Objectif :
' Gérer les taches à exécuté
'Liste des fonctions public et résumé :
' - Contain_ID_Tache : Test si l'ID_Tache existe dans la collection
' - ExecuteTache : Exécute une tache (exe, bat, cmd, ...) et retourne le ProssessID
' - ExecuteTacheAttendMort : Exécute une tache et attend sa mort pour quitter la fonction
' - TacheEnCours (sur défini) : Test si un processus est actif (en mémoire)
' - TueTache (sur défini) : Tue une tache en exécution (en mémoire)
' - RetrouveProssessID : Retourne le ProssessID de la tache nommé
' - AttendMort (sur défini) : Attend la mort d'une tache
'
' Fait le : 09/09/2008
' Fait par Waurzyczka Vincent (Polack77)
' Version 1.1
'------------------------------------------------------------------------------
Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Int32)
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Int32, ByVal uExitCode As Int32) As Int32
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Int32, ByVal DesiredAccess As Int32, ByVal TokenHandle As Int32) As Int32
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccess As Int32, ByVal bInheritHandle As Int32, ByVal dwProcessID As Int32) As Int32
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Int32, ByRef lpExitCode As Int32) As Int32
Private ListeTache As New System.Collections.Generic.Dictionary(Of String, Long)
Private Const CoIn32_DelaisAttenteEntreTestMort As Int32 = 1000
'------------------------------------------------------------------------------
'Objectif :
'Test si l'ID_Tache existe dans la collection
' Input :
' ID_Tache = Un nom de tache en toute lettre
' Output
' Boolean = Vrais si l'ID_Tache existe dans la collection faux si non
' Fait le : 09/09/2008
' Fait par Waurzyczka Vincent (Polack77)
' Version 1.0
'------------------------------------------------------------------------------
Public Function Contain_ID_Tache(ByVal ID_Tache As String) As Boolean
Return ListeTache.ContainsKey(ID_Tache)
End Function
'------------------------------------------------------------------------------
'Objectif :
'Exécute une tache et retourne le ProssessID
' Input :
' FichierExecutable : Chemin complet de la tache à exécuté
' ID_Tache (optionnel) : Nom à stocké pour retrouver le ProssessID
' Output
' Long = Le ProssessID de la tache ou 0 si erreur (fichier exécutable non trouvé)
' Fait le : 09/09/2008
' Fait par Waurzyczka Vincent (Polack77)
' Version 1.0
'------------------------------------------------------------------------------
Public Function ExecuteTache(ByVal FichierExecutable As String, Optional ByVal ID_Tache As String = Nothing) As Long
Dim ProssessID As Int32
Try
ProssessID = Shell(FichierExecutable)
If ID_Tache IsNot Nothing Then
ListeTache.Add(ID_Tache, ProssessID)
End If
Return ProssessID
Catch ex As Exception
Return 0
End Try
End Function
'------------------------------------------------------------------------------
'Objectif :
'Exécute une tache et attend sa mort pour quitter la fonction
' Input :
' FichierExecutable : Chemin complet de la tache à exécuté
' Output
' Boolean = Vrais si pas de problème faux si non (fichier exécutable non trouvé)
' Fait le : 09/09/2008
' Fait par Waurzyczka Vincent (Polack77)
' Version 1.0
'------------------------------------------------------------------------------
Public Function ExecuteTacheAttendMort(ByVal FichierExecutable As String) As Boolean
Dim ProssessID As Long
ProssessID = ExecuteTache(FichierExecutable)
If ProssessID <> 0 Then
AttendMort(ProssessID)
Return True
Else
Return False
End If
End Function
'------------------------------------------------------------------------------
'Objectif :
'Test si la tache passé en paramètre est active (en mémoire)
' Input :
' ID_Tache : Nom de la tache (nom passé à ExecuteTache)
' Output
' Boolean : Vrais si la tache est en cours Faux si non
' Si la tache n'est plus en cours elle est supprimer de la collection
' Si le nom de la tache n'existe pas dans la collection retourne Faux
' Fait le : 09/09/2008
' Fait par Waurzyczka Vincent (Polack77)
' Version 1.0
'------------------------------------------------------------------------------
Public Function TacheEnCours(ByVal ID_Tache As String) As Boolean
If ListeTache.ContainsKey(ID_Tache) Then
If TacheEnCours(ListeTache(ID_Tache)) Then
Return True
Else
ListeTache.Remove(ID_Tache)
Return False
End If
Else
Return False
End If
End Function
'------------------------------------------------------------------------------
'Objectif :
'Test si la tache passé en paramètre est active (en mémoire)
' Input :
' ProssessID : Le ProssessID à tester
' Output
' Boolean : Vrais si la tache est en cours Faux si non
' Fait le : 09/09/2008
' Fait par Waurzyczka Vincent (Polack77)
' Version 1.0
'------------------------------------------------------------------------------
Public Function TacheEnCours(ByVal ProssessID As Long) As Boolean
Dim lExitCode As Int32
GetExitCodeProcess(OpenProcess(&H1F0FFF, 0&, ProssessID), lExitCode)
Return (lExitCode = &H103&)
End Function
'------------------------------------------------------------------------------
'Objectif :
'Tue la tache passé en paramétre
' Input :
' ID_Tache : Nom de la tache (nom passé à ExecuteTache)
' Output
' Boolean : Vrais si la tache à été correctement tuée
' Si la tache n'est plus en cours elle est supprimer de la collection
' Si le nom de la tache n'existe pas dans la collection retourne Faux
' Fait le : 09/09/2008
' Fait par Waurzyczka Vincent (Polack77)
' Version 1.0
'------------------------------------------------------------------------------
Public Function TueTache(ByVal ID_Tache As String) As Boolean
If ListeTache.ContainsKey(ID_Tache) Then
If TueTache(ListeTache(ID_Tache)) Then
ListeTache.Remove(ID_Tache)
Return True
Else
Return False
End If
Else
Return False
End If
End Function
'------------------------------------------------------------------------------
'Objectif :
'Tue la tache passé en paramètre
' Input :
' ProssessID : Le ProssessID à tué
' Output
' Boolean : Vrais si la tache à été correctement tuée ou si elle étais déjà morte
' Faux en cas d'erreur (normalement n'arrive jamais)
' Fait le : 09/09/2008
' Fait par Waurzyczka Vincent (Polack77)
' Version 1.0
'------------------------------------------------------------------------------
Public Function TueTache(ByVal ProssessID As Long) As Boolean
Try
If TacheEnCours(ProssessID) Then
Dim lngHwndProcess As Long
lngHwndProcess = OpenProcess(&H1F0FFF, 0&, ProssessID)
TerminateProcess(lngHwndProcess, 0&)
End If
Return True
Catch ex As Exception
Return False
End Try
End Function
'------------------------------------------------------------------------------
'Objectif :
'Retourne le ProssessID de la tache nommé
' Input :
' ID_Tache : Nom de la tache (nom passé à ExecuteTache)
' Output
' Long : Le ProssessID de la tache ou 0 si elle n'existe pas dans la collection
' Fait le : 09/09/2008
' Fait par Waurzyczka Vincent (Polack77)
' Version 1.0
'------------------------------------------------------------------------------
Public Function RetrouveProssessID(ByVal ID_Tache As String) As Long
If ListeTache.ContainsKey(ID_Tache) Then
Return ListeTache(ID_Tache)
Else
Return 0
End If
End Function
'------------------------------------------------------------------------------
'Objectif :
'Attend la mort de la tache reçu
' Input :
' ID_Tache : Nom de la tache (nom passé à ExecuteTache)
' Output
' Boolean : Faux si ID_Tache n'existe pas dans la collection
' Fait le : 09/09/2008
' Fait par Waurzyczka Vincent (Polack77)
' Version 1.0
'------------------------------------------------------------------------------
Public Function AttendMort(ByVal ID_Tache As String) As Boolean
If ListeTache.ContainsKey(ID_Tache) Then
AttendMort(ListeTache(ID_Tache))
Return True
Else
Return False
End If
End Function
'------------------------------------------------------------------------------
'Objectif :
'Attend la mort de la tache reçu
' Input :
' ProssessID : Le ProssessID de la tache
' Fait le : 09/09/2008
' Fait par Waurzyczka Vincent (Polack77)
' Version 1.0
'------------------------------------------------------------------------------
Public Sub AttendMort(ByVal ProssessID As Long)
While TacheEnCours(ProssessID)
Sleep(CoIn32_DelaisAttenteEntreTestMort)
End While
End Sub
End Module
Amicalement 
Pensez "Réponse acceptée"