Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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.
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,
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 ,
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é.