Private Declare Function PostThreadMessage Lib "user32" Alias "PostThreadMessageA" (ByVal idThread As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Const PROCESS_QUERY_INFORMATION As Long = &H400
Private Const PROCESS_TERMINATE As long = &H1
Public Function CloseProcess(ProcessID As Long, Optional Delai As Long = 3000, Optional Force As Boolean = False) As Long
Dim hProcess As Long
Dim ExitCode As Long
' Ouvre le processus
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_TERMINATE, 0, ProcessID)
'Envoi un message de fermeture au thread principal de l'application
PostThreadMessage ProcessID, WM_QUIT, 0, 0
'on attend la femeture du process
WaitForSingleObject hProcess, Delai
'on verifie que celui ci s'est bien arreté
GetExitCodeProcess hProcess, ExitCode
's 'il est toujours en cours
If ExitCode = STILL_ACTIVE Then
'si on a choisi l'option force on le ferme
If Force = True Then
CloseProcess = TerminateProcess(hProcess, 0)
End If
Else
CloseProcess = 1
End If
CloseHandle hProcess
End Function
Seul les admins et l'auteur du code lui même peuvent modifier ce code.