Sur kernerl32.dll donc windows xp, il suffit d'appeler la fonction avec comme parametre le nom du processus à killer: killprocessus("explorer.exe")
Ca parcours la liste des processus qui s'executent et trouve (ou non) le premier processus du nom voulu et le ferme.
Plus qu'a savoir ce qu'est que le nom d'un processus, c pas un chemin, ni une url, mais juste le nom du processus, donc celui qui figure dans l'onglet "processus" du gestionnaire des taches
Source / Exemple :
Attribute VB_Name = "processus"
Option Compare Database
Option Explicit
'----------------------------------------------------------------------------------------------------------'
' déclaration des types utilisés
'----------------------------------------------------------------------------------------------------------'
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 Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
'----------------------------------------------------------------------------------------------------------'
' déclaration des types utilisés
'----------------------------------------------------------------------------------------------------------'
Const MAX_PATH As Integer = 260
Private Type LUID
LowPart As Long
HighPart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szexeFile As String * MAX_PATH
End Type
'----------------------------------------------------------------------------------------------------------'
' Terminer un processus : fonction système à ne surtout pas comprendre !!
'----------------------------------------------------------------------------------------------------------'
Private Function ProcessTerminate(Optional lProcessID As Long, Optional lHwndWindow As Long) As Boolean
Dim lhwndProcess As Long
Dim lExitCode As Long
Dim lRetVal As Long
Dim lhThisProc As Long
Dim lhTokenHandle As Long
Dim tLuid As LUID
Dim tTokenPriv As TOKEN_PRIVILEGES, tTokenPrivNew As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
Const PROCESS_ALL_ACCESS = &H1F0FFF, PROCESS_TERMINAT = &H1
Const ANYSIZE_ARRAY = 1, TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8, SE_DEBUG_NAME As String = "SeDebugPrivilege"
Const SE_PRIVILEGE_ENABLED = &H2
On Error Resume Next
If lHwndWindow Then
lRetVal = GetWindowThreadProcessId(lHwndWindow, lProcessID)
End If
If lProcessID Then
lhThisProc = GetCurrentProcess
OpenProcessToken lhThisProc, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, lhTokenHandle
LookupPrivilegeValue "", SE_DEBUG_NAME, tLuid
tTokenPriv.PrivilegeCount = 1
tTokenPriv.TheLuid = tLuid
tTokenPriv.Attributes = SE_PRIVILEGE_ENABLED
AdjustTokenPrivileges lhTokenHandle, False, tTokenPriv, Len(tTokenPrivNew), tTokenPrivNew, lBufferNeeded
lhwndProcess = OpenProcess(PROCESS_TERMINAT, 0, lProcessID)
If lhwndProcess Then
ProcessTerminate = CBool(TerminateProcess(lhwndProcess, lExitCode))
Call CloseHandle(lhwndProcess)
End If
End If
On Error GoTo 0
End Function
'----------------------------------------------------------------------------------------------------------'
' trouver un processus en fonction de son nom placé en paramètre
'----------------------------------------------------------------------------------------------------------'
Public Function KillProcessus(ByVal sProcessNameExe As String) As String
Dim i As Integer
Dim hSnapshot As Long
Dim uProcess As PROCESSENTRY32
Dim r As Long
Dim NOM(1 To 100)
Dim num(1 To 100)
Dim NR As Integer
Const TH32CS_SNAPPROCESS As Long = 2&
NR = 0
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&) ' faire un instantané des processus s'executant au moment voulu
If hSnapshot = 0 Then Exit Function ' si y'a pas alors ça sert à rien de continuer
uProcess.dwSize = Len(uProcess) ' initialisation de uProcess
r = ProcessFirst(hSnapshot, uProcess) ' on met dans r le premier processus rencontré
Do While r ' faire tant que y'a des processus dans la liste
NR = NR + 1 ' incrémentation de l'indice
NOM(NR) = uProcess.szexeFile ' rempli le tableau de noms de processus
num(NR) = uProcess.th32ProcessID ' rempli le tableau d'ID de processus
r = ProcessNext(hSnapshot, uProcess) ' on essaie de passer au processus suivant
Loop
For i = 1 To NR ' pour tous les processus listés
If InStr(UCase(NOM(i)), UCase(sProcessNameExe)) <> 0 Then ' si c le bon
ProcessTerminate (num(i)) ' on le nique
Exit For ' et on sort (à enlever si on veut tuer tous les processus du nom sProcessNameExe
End If
Next i
End Function ' fin
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.