Exemple de code permettant l'utilisation de WMI sous Windows 2000/XP/2003. Il est également possible de l'utiliser sous Win98 à condition d'installer WMI.
L'intérêt majeur d'utiliser WMI est double car il permet d'uniformiser l'appel aux API d'une part et d'autre part il permet de faire des requêtes sur des ordinateurs distants.
Evidemment, il va s'en dire que la plupart des opérations nécessitent les droits administrateurs.
Plusieurs fonctions sont disponibles :
* WMIExecuteWQL : Permet de faire une requête WQL dans un espace de nom donné et de trouver les propriétés des classes WMI.
Par ex: Showmessage(WMIExecuteWQL('.','root\cimv2','Select * from Win32_Processor').Text); {Va afficher les différentes informations disponibles sur le processeur ou les processeurs, si il y en a plusieurs}.
* WMIServiceControl : Permet d'Arrêter/Démarrer/Mettre en pause un service grâce à son nom.
Par exemple : if WMIServiceControl ('.','Avertissement',WMI_SERVICE_STOP) then Showmessage('Le service "Avertissement" a été arrêté !');
* WMIArretPC : Permet d'arrêter/Redémarrer/Fermer la session sur un ordinateur local ou distant !
Par exemple: if WMIArretPC ('.',WMI_LOGOFF+WMI_FORCED) then Showmessage ('Vous venez de forcer la fermeture de session !');
* WMIArretProcess : Permet de "killer" un processus grâce son PID (Process Identifier).
Par Exemple: If WMIArretProcess ('.',2563) then Showmessage ('Vous venez d''arrêter le processus dont le PID est :'+IntToStr(PID));
* EnnumereClasseWMI : Permet d'énumérer les classes de l'espace de nom spécifié.
Par exemple: ListBox1.Items := EnnumereClasseWMI('root\cimv2');
Dans l'exemple du fichier ZIP, j'ai implémenté uniquement 2 de ces fonctions : EnnumereClasseWMI et WMIExecuteWQL mais les autres sont dans l'unité WMI.pas.
Bonne programmation.