formateur informatique

Lister tous les processus Windows en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Lister tous les processus Windows en VBA Access
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Lister les processus du système

Avec cette nouvelle astuce VBA Access, nous allons voir comment récolter les processus actifs du système d'exploitation, dans une zone de liste d'un formulaire. Dans un deuxième temps, avec un second chapitre, nous apprendrons à couper l'un d'entre eux par le code VBA Access. Ce procédé peut paraître curieux et pourtant, il peut s'avérer très utile. En effet et dans des formations précédentes, nous avons appris à accéder aux ressources d'Excel, de PowerPoint ou encore de Word. Même si nous avions pris soin de détruire les objets de programmation à l'issue du développement, cette technique peut nous assurer d'avoir complètement terminé les instances pour les vider de la mémoire de l'ordinateur.

Base de données Access à télécharger
Pour démontrer cette nouvelle astuce, nous suggérons d'appuyer les travaux sur un formulaire Access disposant de certains contrôles pour questionner les processus de l'ordinateur.
  • Télécharger le fichier compressé lister-processus-systeme.rar en cliquant sur ce lien,
  • Puis, le décompresser dans le dossier de votre choix,
  • Double cliquer sur le fichier réceptionné pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation sur la gauche, double cliquer sur le formulaire F_Export,
Ainsi, nous l'exécutons. Ce formulaire est doté de deux boutons, d'une zone de liste et d'une zone de texte. Un clic sur le premier bouton, nommé Lister, doit permettre d'afficher tous les processus actifs dans la zone de liste, au centre du formulaire. Nous nous soucierons du second bouton et de la zone de texte, dans le second volet.

La procédure événementielle
Pour débuter, nous devons commencer par associer un code VBA au clic sur le bouton Lister. Une procédure existe déjà et nous allons le constater.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur le bouton Lister pour le sélectionner,
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
  • Puis, cliquer sur le petit bouton associé à son événement Au Clic,
  • Dans la boîte de dialogue qui suit, choisir le Générateur de code et valider par Ok,
Nous basculons ainsi dans l'éditeur VBA Access entre les bornes de la procédure lister_Click. A ce titre, vous notez la présence d'une autre procédure, juste au-dessus. Elle se nomme recupProc.

Sub recupProc(nomProcessus As String)

'winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

End Sub

Private Sub lister_Click()

End Sub


Elle propose une ligne d'instruction en commentaire. Il s'agit de la valeur que nous devrons utiliser pour instancier la classe WMI. Comme elle est complexe, nous la fournissons. A l'avenir, il s'agira de la répliquer à l'identique. C'est elle qui permet entre autres, d'accéder aux processus Windows. Enfin et nous le verrons, si le paramètre n'est pas fourni à la procédure recupProc, nous bâtirons dans un premier temps un code VBA Access capable simplement de récupérer tous les processus actifs, pour les énumérer dans la zone de liste.

Les variables
Nous allons commencer par développer le code de la procédure destinée à être appelée, celui de la procédure recupProc. Des variables sont nécessaires, notamment pour instancier une classe Windows toute particulière.
  • Dans la procédure recupProc et au-dessus du commentaire, ajouter les déclarations suivantes :
Sub recupProc(nomProcessus As String)
Dim objetWMI As Object: Dim requeteWMI As String
Dim lesProcessus As Object: Dim chaqueProcessus As Object


'winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

End Sub


Nous déclarons tout d'abord un objet que nous nommons objetWMI. Il est destiné à instancier cette classe WMI : Windows Management Instrumentation, pour interroger le système d'exploitation et pour accéder aux processus de Windows. La variable qui suit : requeteWMI, doit servir à exécuter une syntaxe SQL sur l'objet WMI, pour récolter la collection des processus actifs. Ensuite, nous utiliserons les deux derniers objets, précisément pour parcourir la collection de ces processus et les restituer tour à tour dans la zone de liste du formulaire.

Les affectations
Maintenant que les variables existent, il est temps d'instancier cette classe WMI et grâce à elle, de récolter la collection des processus actifs.
  • A la suite du code VBA, ajouter les instructions suivantes :
...
liste.RowSource = ""
Set objetWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
requeteWMI = "SELECT Name FROM Win32_Process"
...


Nous vidons tout d'abord le contenu de la zone de liste du formulaire. Pour cela, nous réinitialisons sa propriété RowSource sur une chaîne vide. Ensuite, grâce à la fonction GetObject avec en paramètre, la valeur qui était en commentaire, nous instancions la classe WMI. Dès lors, nous initialisons la requête destinée à récupérer tous les noms (SELECT Name) à partir des processus actifs du système (FROM Win32_Process).

Parcourir les processus
Maintenant que la classe est instanciée, nous allons pouvoir exploiter une méthode héritée afin d'exécuter la requête sur le système d'exploitation. Cette action va retourner la collection des processus actifs que nous devons stocker dans l'objet lesProcessus. C'est alors que nous pourrons les parcourir tous grâce à une boucle For Each.
  • Toujours à la suite du code de la procédure, créer la boucle For Each suivante :
...
Set lesProcessus = objetWMI.ExecQuery(requeteWMI)
For Each chaqueProcessus In lesProcessus
liste.AddItem chaqueProcessus.Name
Next chaqueProcessus
...


Nous initialisons (Set) notre objet lesProcessus sur la collection des processus retournée par l'exécution de la requête, grâce à la méthode héritée ExecQuery de notre objet objetWMI. C'est alors que nous engageons notre objet chaqueProcessus dans une boucle For Each, pour le faire parcourir toute la collection (In lesProcessus). A chaque passage, nous ajoutons (AddItem) le nom du processus en cours d'analyse (Name) dans la zone de liste du formulaire.

Bien sûr, pour finir de coder proprement, après la boucle, il convient de détruire l'objet WMI, afin de libérer la mémoire : Set objetWMI = Nothing.

Appeler la procédure au clic
Telle que nous l'avons prévue, notamment pour les besoins du volet suivant, cette procédure doit être appelée avec un paramètre, qui peut être vide si nous souhaitons simplement lister tous les processus. C'est donc ce que nous devons nous employer à faire désormais.
  • Dans les bornes de la procédure lister_Click, ajouter l'appel suivant :
recupProc ""

Lister tous les processus Windows sur un formulaire Access en VBA

Désormais, si vous exécutez le formulaire et que vous cliquez sur le bouton Lister, vous constatez que tous les processus actifs sont effectivement listés dans la zone de liste du formulaire. D'ailleurs vous pouvez noter la présence de celui d'Access, puisque nous sommes en train de travailler dessus.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn