~ Edito ~
12/03/2006 @ 13:39
Depuis la dernière mise à jour (qui remonte à... oulala plusieurs mois), un petit ménage de printemps s'impose. Ca tombe bien, c'est presque la période. Au menu, et progressivement sur les jours à venir, rafraîchissement de plusieurs fonctions et procédures, nouvelles APIs et nouveaux programmes.
~ Rechercher ~
~ Annuaire VB ~
~ Partenaires ~
|
Fonction GetExitCodeProcess
Declare Function GetExitCodeProcess Lib "kernel32" Alias "GetExitCodeProcess" ( _ ByVal hProcess As Long, _
lpExitCode As Long) As Long
Versions : . Windows 95/98 : Oui . Windows NT : A partir de 3.1 . Windows 2000/XP : OuiDescription : Cette fonction retourne l'état de sortie d'un processus. Elle permet ainsi de savoir si un processus s'est terminé correctement ou non.
hProcess est le handle du processus à examiner.
lpExitCode est le code de sortie du processus qui sera renseigné par la fonction.
En cas d'échec la fonction retourne la valeur 0, sinon un valeur différente.
Si le processus n'est pas terminé, l'état retourné correspond à la
constante STILL_ACTIVE (&H103), sinon, la valeur de sortie peut être égale à :
- la valeur retournée par ExitProcess ou TerminateProcess,
- la valeur de retour de la fonction main ou winmain du processus,
- la valeur de l'erreur qui a causé la fermeture de l'application.
Exemple d'utilisation :
' Exemple de Phil (plancon@onetelnet.fr)
Option Explicit
' ---Les API concernant le contrôle des processus et des tâches sous Windows---
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, _
lpExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
' Ferme une application extérieure
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, _
ByVal uExitCode As Long) As Long
' Ferme notre application
Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
' ---Autres API---
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetLastError Lib "kernel32" () As Long
' ---Ici les constantes---
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
Sub Shell(ByVal Tache As String)
' ---Cette fonction crée une tache puis regarde si elle est active---
' Tache est un nom de fichier
' ---Déclaration des variables---
Dim hProcess As Long
Dim RetVal As Long
' ---Ouvre un programme et récupère son handle (hProcess)---
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(Tache, 6))
' ---Regarde si le processus est actif---
Do
' Retourne le status du processus en cours
GetExitCodeProcess hProcess, RetVal
' Les 2 lignes suivantes sont recommandées pour éviter de faire
' travailler le système avec GetExitCodeProcess
DoEvents
Sleep 100
Loop While RetVal = STILL_ACTIVE
CloseHandle (hProcess)
End Sub
Private Sub Form_Load()
TesMort ("c:\winnt\notepad.exe")
End Sub
Sub TesMort(ByVal Tache As String)
' ---Tue une application en cours---
' Cette fonction force l'arrêt d'une tâche.
' ---Déclaration des variables---
Dim hProcess As Long
Dim RetVal As Long
' ---Ouvre un programme et récupère son handle (hProcess)---
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(Tache, 6))
' ---Regarde si le processus est actif---
If (hProcess <= 0) Then
MsgBox "OpenProcess() a échoué : " & GetLastError()
Else
' Sinon le tue
If TerminateProcess(hProcess, 1) Then
MsgBox "TerminateProcess() a échoué " & GetLastError()
Else
MsgBox "Tu es mort"
CloseHandle (hProcess)
End If
End If
End Sub
Retour à la liste des API |