begin process at 2012 02 12 05:37:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > KILL D'UN PROCESSUS SOUS NT AVEC SON NOM

KILL D'UN PROCESSUS SOUS NT AVEC SON NOM


 Information sur la source

Note :
7,5 / 10 - par 2 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Niveau :Débutant Date de création :29/07/2004 Date de mise à jour :30/07/2004 16:57:20 Vu / téléchargé :5 188 / 467

Auteur : Clonk

Ecrire un message privé
Site perso
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 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

  • 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
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 ;) )

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

30 juillet 2004 16:57:20 :
J'ai juste mis les commentaires en Français ...

 Sources de la même categorie

Source avec Zip Source avec une capture AUTORISER/REFUSER L'EXECUTION DE PROCESSUS par pierreh51
Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION... par ShareVB
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB
Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER par ShareVB
Source avec Zip Source avec une capture DESACTIVER / ACTIVER LES MISES EN VEILLES PC par Arsena

Commentaires et avis

Commentaire de PCisteAnonyme le 28/08/2004 02:35:02

Bravo, mais tu a oublié de déclarer 2 fonctions, à savoir
EnumProcesses et EnumProcessmodules

il faut donc rajouter cela à ta source, au niveau des déclarations:

Private Declare Function EnumProcesses Lib "PSAPI.DLL" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long

Private Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long

Sinon, encor bravo pour ta source

Commentaire de PCisteAnonyme le 28/08/2004 02:41:04

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

Commentaire de Clonk le 28/08/2004 10:19:19

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)

Commentaire de PCisteAnonyme le 28/08/2004 13:45:47

Autant pour moi, j'avais mal lu, désolé

Commentaire de PCisteAnonyme le 28/08/2004 13:45:52

Autant pour moi, j'avais mal lu, désolé

Commentaire de ImmortalPC le 14/01/2005 14:03:39

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
@++

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales