Kill d'un processus sous nt avec son nom

Soyez le premier à donner votre avis sur cette source.

Vue 6 099 fois - Téléchargée 525 fois

Description

Bon, il y a bien 14.000 source sur comment killer un processus, mais j'en ai trouvé aucun qui marche sous Windows NT4.0. Alors s'il y en a qui marchent encore à ça (comme moi au taff), ça peut toujours servir!

J'ai mis les 2 modules dans les sources, si vous avez déjà les protos de PSAPI dans un module, copiez juste le code ci dessous.

Vous pouvez aussi récupérer les sources des protos sur le net (ce que j'ai fais)

L'appel se fait ainsi :
KillProcess ("excel.exe")

Source / Exemple :


Option Explicit

Private Const MAX_PATH = 260
Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_QUERY_INFORMATION = &H400

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 'API de fermeture de Process

Public Sub KillProcess(ProcName As String)
Dim tmpProcname As String
Dim aProcesses() As Long
Dim cbNeeded As Long
Dim cProcesses As Long
Dim hProcess As Long
Dim i As Long
   ' // aProcesses : liste des processus
    ReDim aProcesses(0 To 1023) As Long
   If (EnumProcesses(aProcesses(0), 1024 * 4, cbNeeded) <> 0) Then
      '// On regarde le nombre de process retournés:
      cProcesses = cbNeeded / 4
      '// On vérifie le nom:
      For i = 0 To cProcesses - 1
        tmpProcname = GetProcessName(aProcesses(i))
        tmpProcname = Left$(tmpProcname, Len(ProcName))
        If tmpProcname = ProcName Then
        '// Si c'est lui, on le kill
            hProcess = OpenProcess(1, False, aProcesses(i))
            Call TerminateProcess(hProcess, 4)
            Exit Sub
        End If
      Next i
   Else
      MsgBox "Failed to get process list.", vbCritical
   End If
End Sub

Public Function GetProcessName(ByVal lProcessID As Long) As String
Dim szProcessName As String
Dim lLen As Long
Dim hProcess As Long
Dim hMod(0 To 1023) As Long
Dim cbNeeded As Long
Dim lR As Long
   szProcessName = "Unknown"
   lLen = MAX_PATH
   '//Ouverture du processus
   hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or _
                                   PROCESS_VM_READ, _
                                   0, lProcessID)
   If (lProcessID = 0) Then
      szProcessName = "System Idle"
   ElseIf (lProcessID = 2) Then
      szProcessName = "System"
   Else
      '// Récupération du nom du process:
      If (hProcess <> 0) Then
         If (EnumProcessModules(hProcess, hMod(0), 1024 * 4, _
             cbNeeded)) Then
               '//On le met dans la variable:
               szProcessName = String$(lLen, 0)
               LSet szProcessName = "unknown"
               lR = GetModuleBaseName(hProcess, hMod(0), szProcessName, lLen)
         End If
      End If
   End If
   '//On ferme le process :
   CloseHandle hProcess
   GetProcessName = szProcessName
End Function

Conclusion :


Voilà, il n'est surement pas parfait, mais ça marche.
Si vous avez des améliorations à apporter, faites les partager, ça peut toujorus servir (à moi notamment ;) )

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Salut,
c'est pile ce que je cherchais !!
Quelqu'un pourrais t'il me le compiler et me l'envoyer sur www.immortalpc@free.fr
@++
Messages postés
8
Date d'inscription
vendredi 17 janvier 2003
Statut
Membre
Dernière intervention
28 août 2004

Autant pour moi, j'avais mal lu, désolé
Messages postés
8
Date d'inscription
vendredi 17 janvier 2003
Statut
Membre
Dernière intervention
28 août 2004

Autant pour moi, j'avais mal lu, désolé
Messages postés
278
Date d'inscription
mardi 22 janvier 2002
Statut
Membre
Dernière intervention
29 août 2006

je sais, je l'ai mis dans la description comme quoi je n'ai mis que les fonctions, qu'il fallait utiliser PSAPI (le tout est dans le zip)
Messages postés
8
Date d'inscription
vendredi 17 janvier 2003
Statut
Membre
Dernière intervention
28 août 2004

petite édition il manque aussi cette fonctione:
GetModuleBaseName (hProcess, hMod(0), szProcessName, lLen), mais je ne l'ai trouvé nul part!
Afficher les 6 commentaires

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.