formateur informatique

Couper un processus système en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Couper un processus système 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    Vidos astuces Instagram
Sujets que vous pourriez aussi aimer :


Couper un service système

Dans le volet précédent, nous avons appris à lister tous les processus actifs du système d'exploitation Windows, dans une zone de liste d'un formulaire Access. Avec cette nouvelle astuce, au clic sur l'un d'entre eux dans cette zone, nous allons apprendre à couper le processus correspondant, par le code VBA Access.



Base de données Access à télécharger
Pour aboutir cette nouvelle aventure, nous suggérons d'appuyer l'étude sur une base de données Access accueillant les travaux du volet précédent, pour récolter tous les processus actifs.
  • Télécharger le fichier compressé stopper-un-processus-systeme.rar en cliquant sur ce lien,
  • Le décompresser dans le dossier de votre choix,
  • Double cliquer sur le fichier résultant pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité pour libérer les ressources,
  • Dans le volet de navigation sur la gauche, double cliquer sur le formulaire F_Export,
Ainsi, nous l'exécutons. Ce formulaire est fait de deux boutons, d'une zone de texte et d'une zone de liste déroulante. Si vous cliquez sur le premier bouton, intitulé Lister, vous obtenez la liste de tous les processus Windows actifs dans la zone de liste déroulante au centre du formulaire.

Lister les processus Windows sur un formulaire Access en VBA

Ce résultat est le fruit des travaux précédents. Désormais, l'utilisateur doit pouvoir désigner l'un de ces processus au clic de l'un d'entre eux dans la zone de liste, pour que son nom s'affiche dans la zone de texte placée en dessous des deux boutons. Dès lors, au clic sur le bouton Couper, le code VBA Access que nous devons finir d'enrichir, doit se charger de détruire l'instance et de fermer les potentielles fenêtres associées.



Le choix du processus
L'utilisateur doit donc pouvoir cliquer sur un processus à couper dans la zone de liste. Pour cela, une procédure événementielle doit être associée à ce contrôle.
  • 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 la zone de liste pour la 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,
C'est ainsi que nous basculons dans l'éditeur VBA Access, plus précisément entre les bornes de la procédure événementielle liste_Click. Vous constatez le code de la procédure précédente (recupProc) pour lister les processus Windows. C'est elle que nous devons appeler au clic dans cette zone de liste, en lui passant le processus qu'il s'agit de couper. La zone de texte est nommée nomProc. Vous pouvez le constater en consultant sa feuille de propriétés depuis le formulaire Access.
  • Dans les bornes de la procédure liste_Click, ajouter l'instruction VBA suivante :
...
nomProc.Value = liste.Value
...


Très simplement, nous affectons le contenu (Value) de la zone de texte sur le nom du processus cliqué dans la zone de liste (liste.Value).
  • Enregistrer les modifications (CTRL + S) et revenir sur le formulaire Access (ALT + Tab),
  • Exécuter ce dernier, par exemple en enfonçant la touche F5 du clavier,
  • Cliquer sur le bouton Lister pour récolter les noms de tous les processus actifs,
  • Puis, cliquer sur l'un d'entre eux directement dans la liste,
Récupérer le nom du processus Windows cliqué depuis un formulaire Access

Comme vous pouvez le voir, grâce à cette simple ligne de code VBA, le nom du processus à couper est désormais isolé et clairement identifié dans la zone de texte placée sous les deux boutons du formulaire Access.



Appeler la procédure des processus
Au clic sur le second bouton (Couper), nous devons désormais appeler la procédure recupProc en lui passant le nom du processus à couper, en paramètre. Telle que nous l'avions développée, en l'absence de valeur de processus, elle se contente de les lister tous. Et d'ailleurs, elle ne sait rien faire d'autre pour l'instant. Nous devrons adapter son traitement dans un deuxième temps.
  • Revenir sur le formulaire en conception,
  • Cliquer sur le bouton Couper pour le sélectionner,
  • Activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le petit bouton associé à son événement Au clic,
  • Dans les propositions, choisir le Générateur de code et valider par Ok,
Nous sommes de retour dans l'éditeur VBA Access mais cette fois, entre les bornes de la procédure événementielle couper_Click.
  • Dans cette procédure, ajouter l'instruction VBA suivantes :
Private Sub couper_Click()
recupProc nomProc.Value
End Sub


Nous réalisons un appel à la procédure en lui passant le nom du processus à arrêter.

Trouver et stopper le processus
Nous avons largement détaillé le code VBA de la procédure recupProc dans le volet précédent. Elle instancie la classe WMI (Windows Management Instrumentation) pour exécuter une requête destinée à récolter la collection des processus actifs. C'est alors que nous avions entrepris une boucle For Each pour les parcourir tous et restituer leurs noms dans la zone de liste sur le formulaire.

C'est cette boucle For Each que nous devons maintenant adapter. A chaque passage, nous devons vérifier si le nom du processus en cours d'analyse est équivalent à celui transmis en paramètre de la procédure. Si le test est concluant, le code VBA doit le stopper.
  • Dans la procédure recupProc, adapter le code de la boucle For Each comme suit :
...
For Each chaqueProcessus In lesProcessus
If LCase(nomProcessus) = LCase(chaqueProcessus.Name) Then
chaqueProcessus.Terminate
Else

liste.AddItem chaqueProcessus.Name
End If
Next chaqueProcessus
...


A chaque passage dans la boucle, nous comparons le nom passé en paramètre avec le nom du processus en cours d'analyse. Nous exploitons deux fois la fonction LCase pour lisser les différences de casses. Si les deux noms convertis en minuscules correspondent, nous exploitons la méthode Terminate pour le stopper. Dans le cas contraire, nous ajoutons le nom du processus en cours dans la zone de liste.

Couper le processus désigné
L'adaptation du code est terminée. Pour les besoins des démonstrations, nous proposons de lancer une application pilotée par un processus.
  • Ouvrir un classeur Excel puis revenir sur le formulaire Access,
  • Exécuter ce dernier, par exemple avec la touche F5 du clavier,
  • Cliquer sur le bouton Lister pour récupérer les noms de tous les processus actifs,
  • Atteindre la base de la zone de liste,
  • Cliquer sur le processus Excel.Exe,
  • Puis, cliquer sur le bouton Couper,
Arrêter un processus système par le code VBA Access

En même temps que vous voyez l'icône d'Excel disparaître de la barre des tâches, vous constatez que la zone de liste se réactualise sur le formulaire. Si vous atteignez la fin de la liste, le processus d'Excel n'est effectivement plus présent, il a été stoppé.

 
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