Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FUNCTION TERMINER(KILL) UN PROCESSUS PAR SON NOM


Information sur la source

Catégorie :Modules Niveau : Débutant Date de création : 08/07/2003 Date de mise à jour : 09/07/2003 13:36:33 Vu : 11 290

Note :
9,2 / 10 - par 10 personnes
9,20 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

Description

Ben ce module n'est pas de moi.
A la base il liste les processus dans un list box et termine celui de son choix.
Mais j'avais besoin de terminé un processus connu au demarage de mon soft, alors j'ai ajouter la fonction qui permet de terminé le processus par son nom d'executable.
si ca peu faire gagner du temps a qq?????
 

Source

  • 'dans un module
  • Option Explicit
  • 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
  • Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
  • Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
  • Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
  • 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
  • Public Const MAX_PATH As Integer = 260
  • Public Const TH32CS_SNAPPROCESS As Long = 2&
  • 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
  • Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  • 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
  • 'Get the process ID from the window handle
  • lRetVal = GetWindowThreadProcessId(lHwndWindow, lProcessID)
  • End If
  • If lProcessID Then
  • 'Give Kill permissions to this process
  • lhThisProc = GetCurrentProcess
  • OpenProcessToken lhThisProc, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, lhTokenHandle
  • LookupPrivilegeValue "", SE_DEBUG_NAME, tLuid
  • 'Set the number of privileges to be change
  • tTokenPriv.PrivilegeCount = 1
  • tTokenPriv.TheLuid = tLuid
  • tTokenPriv.Attributes = SE_PRIVILEGE_ENABLED
  • 'Enable the kill privilege in the access token of this process
  • AdjustTokenPrivileges lhTokenHandle, False, tTokenPriv, Len(tTokenPrivNew), tTokenPrivNew, lBufferNeeded
  • 'Open the process to kill
  • lhwndProcess = OpenProcess(PROCESS_TERMINAT, 0, lProcessID)
  • If lhwndProcess Then
  • 'Obtained process handle, kill the process
  • ProcessTerminate = CBool(TerminateProcess(lhwndProcess, lExitCode))
  • Call CloseHandle(lhwndProcess)
  • End If
  • End If
  • On Error GoTo 0
  • End Function
  • Public Function KillProcessus(nom_process) 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
  • nr = 0
  • hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
  • If hSnapshot = 0 Then Exit Function
  • uProcess.dwSize = Len(uProcess)
  • r = ProcessFirst(hSnapshot, uProcess)
  • Do While r
  • nr = nr + 1
  • nom(nr) = uProcess.szexeFile
  • num(nr) = uProcess.th32ProcessID
  • r = ProcessNext(hSnapshot, uProcess)
  • Loop
  • For i = 1 To nr
  • If InStr(UCase(nom(i)), UCase(nom_process)) <> 0 Then
  • ProcessTerminate (num(i))
  • Exit For
  • End If
  • Next i
  • End Function
  • 'voila pour l'utiliser de votre form:
  • KillProcessus "iexplore.exe"
'dans un module

Option Explicit
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
Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long

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


Public Const MAX_PATH As Integer = 260
Public Const TH32CS_SNAPPROCESS As Long = 2&

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


Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

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
'Get the process ID from the window handle
lRetVal = GetWindowThreadProcessId(lHwndWindow, lProcessID)
End If

If lProcessID Then
'Give Kill permissions to this process
lhThisProc = GetCurrentProcess

OpenProcessToken lhThisProc, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, lhTokenHandle
LookupPrivilegeValue "", SE_DEBUG_NAME, tLuid
'Set the number of privileges to be change
tTokenPriv.PrivilegeCount = 1
tTokenPriv.TheLuid = tLuid
tTokenPriv.Attributes = SE_PRIVILEGE_ENABLED
'Enable the kill privilege in the access token of this process
AdjustTokenPrivileges lhTokenHandle, False, tTokenPriv, Len(tTokenPrivNew), tTokenPrivNew, lBufferNeeded

'Open the process to kill
lhwndProcess = OpenProcess(PROCESS_TERMINAT, 0, lProcessID)

If lhwndProcess Then
'Obtained process handle, kill the process
ProcessTerminate = CBool(TerminateProcess(lhwndProcess, lExitCode))
Call CloseHandle(lhwndProcess)
End If
End If
On Error GoTo 0
End Function

Public Function KillProcessus(nom_process) 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
nr = 0
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
If hSnapshot = 0 Then Exit Function
uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapshot, uProcess)
Do While r
nr = nr + 1
nom(nr) = uProcess.szexeFile
num(nr) = uProcess.th32ProcessID
r = ProcessNext(hSnapshot, uProcess)
Loop
For i = 1 To nr
If InStr(UCase(nom(i)), UCase(nom_process)) <> 0 Then
ProcessTerminate (num(i))
Exit For
End If
Next i
End Function


'voila pour l'utiliser de votre form:
KillProcessus "iexplore.exe" 

Conclusion

Oubliez pas de laisser un petit commentaire, sympa si possible lol....
 

Commentaires et avis

signaler à un administrateur
Commentaire de Satirik le 08/07/2003 23:15:41

ca serait pas : KillProcessus "iexplore.exe" plutot ? et je voie pas pk tu enregistre les donnés ... tu peu directement inclure le processterminate dans le do loop ...

signaler à un administrateur
Commentaire de pcpunch le 08/07/2003 23:28:18

non c pas KillProcessus "iexplore.exe" car cette fonction s'utilise :
killprocessus (n° du processus)
avec la fonction terminerprocessus(iexplore.exe) ca cherche ds la liste des processus le soft et lance Killprocessus avec le nr du process correspondant !! voila.....

signaler à un administrateur
Commentaire de Satirik le 09/07/2003 13:22:01

Public Function KillProcessus(nom_process) As String

chez mou nom_process c'est pas n° process ...InStr(UCase(nom(i)), UCase(nom_process))  ... c'est un reconaissance de quoi ca ???

et puis fait une recherche dans ton code , ya aucune fonction TerminerProcessus , a par quand tu l'appelle a la derniere ligne donc bon ... et au passage le "as string" de la fonction killprocessus on se demande pk il est pas a l'interieur des parenthèses

signaler à un administrateur
Commentaire de pcpunch le 09/07/2003 13:34:44

oui dsl, me suis tromper c bien killprocessus "iexplore.exe" qui fonctionne!!!
j ai modifier ma source pour l adapter a mon soft j'ai pas fais gaffe!!!
c la fonction killprocessus qui utilise la sous fonction processterminate.

signaler à un administrateur
Commentaire de philcam le 28/12/2003 20:05:18

Bon, ben ça à l'air de fonctionner, c'est le principal.
Je vais même pas étudier le code.
Je voulais faire la même chose à partir de la même source mais comme on dit : on va pas réinventer la roue ! et ça fait gagner du temps.
Good Job

ciao

signaler à un administrateur
Commentaire de yannickt le 09/05/2004 00:28:23

bravo, mais ce que c'est long!

signaler à un administrateur
Commentaire de carnez le 27/05/2004 17:33:01

Ca faisait un bout de temps que je cherchais à tuer Excel dans les processus alors que l'application n'était pas (ou plus) ouverte et que pour une raison indéterminée, la fermeture ne s'était pas bien passée.....
D'autant que le processus reste actif tant qu'on ne reboote pas l'ordinateur !

J'avoue ne rien comprendre à ton code, mais intégeré in extenso, ça fonctionne.

Alors bravo et merci

signaler à un administrateur
Commentaire de gillouternay le 26/11/2004 14:52:22

ça fait trés longtemps que je cherchais comme  arréter une application
merci beaucoup et chapeau

signaler à un administrateur
Commentaire de Mopii9 le 18/12/2004 23:19:20

c'est très bien mais très long . . . :)

signaler à un administrateur
Commentaire de SkyRocKo le 02/02/2005 15:00:29

Excellent ! 10/10

Super pour killer les virus actifs et les supprimer :)

Bonne continuation !

signaler à un administrateur
Commentaire de ilbrec le 31/03/2005 16:43:53

Ne fonctionne pas sous NT CreateToolhelpSnapshot n'existe pas dans le kernell32.dll de NT ... dommage!

signaler à un administrateur
Commentaire de paulcardo le 15/04/2005 11:55:29

J'ai supprimé dans ton code la boucle FOR
dans la fonction killprocess.
elle était inutile et alourdissée l'ensemble.
Bravo tout de même pour ton programme
très pratique!!!!!!

Public Function KillProcessus(nom_process) 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
Dim v As Long
nr = 0
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
If hSnapshot = 0 Then Exit Function
uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapshot, uProcess)
v = 0
Do While r And v = 0
nr = nr + 1
nom(nr) = uProcess.szexeFile
num(nr) = uProcess.th32ProcessID
If InStr(UCase(nom(nr)), UCase(nom_process)) = 0 Then
r = ProcessNext(hSnapshot, uProcess)
Else
ProcessTerminate (num(nr))
v = 1
End If
Loop

End Function

signaler à un administrateur
Commentaire de marcdebureaux le 17/08/2005 21:34:12

Avec ce code, est il possible de n'envoyer que le signal SIGTERM ?

signaler à un administrateur
Commentaire de marah le 16/09/2005 00:56:44

il peut fonctionner sous WinXP ? Merci

signaler à un administrateur
Commentaire de GUIEU le 09/07/2006 19:01:25

Bonsoir à tous,

merci pour ce code exemplaire.

Je me sert de celui-ci pour tué un processus de lecteur vidéo lancé par Meedio.
Est-il possible de récupérer la ligne de commande qui à déclencher le process, de façon à en extraire le chemin du film lancé?.

J'ai trouvé sur le site des infos mais ne sait pas les appliquées.

Merci de votre aide.

signaler à un administrateur
Commentaire de joelmarie le 11/07/2006 22:29:20

Un copier coller dans un module et sa marche , rien à dire , c'est compliqué mais ca se débrouille , donc 10/10  comme note , merci j'en avais besoin pour mon boulot .


signaler à un administrateur
Commentaire de MeSod le 25/11/2008 17:02:26

Grand merci a toi je chercher depui longtemps comment "kill" un processus donner merci

signaler à un administrateur
Commentaire de MeSod le 25/11/2008 17:04:13 10/10

Par contre je vien de me rendre conte que quand je ferme le lecteur windows media comme sa ilo me sors qu'il a mal etait fermer et me desactive tout les plugin ptdr

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.