Accès à WMI par Delphi [Résolu/Fermé]

Messages postés
2
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
22 octobre 2003
- - Dernière réponse : cs_fjohnny
Messages postés
49
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 septembre 2006
- 28 mars 2006 à 11:30
Quelqu'un peut-il m'éclairer sur la façon d'accèder à WMI par Delphi ? 8-)
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
23
3
Merci
Même si les exemples sont donnés en C++ (comme à l'accoutumée chez MSDN), celà reste lisible : Windows Management Instrumentation.

Bon courage, débutants s'abstenir...
May Delphi be with you

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 137 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Delphiprog
Messages postés
49
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 septembre 2006
3
Merci
Voilà en glannant des infos à droite et à gauche sur le net, je me suis constitué une petite fonction permettant de faire des requêtes WMI :

Function SWBempropertyToStr(Variable:SWbemProperty): String;
Var Count: Integer;
begin
if VarIsNull (Variable.Get_Value) then Result:=' < Null > ' else
begin
Try
case Variable.CIMType of
wbemCimtypeSint8,
wbemCimtypeUint8,
wbemCimtypeSint16,
wbemCimtypeUint16,
wbemCimtypeSint32,
wbemCimtypeUint32,
wbemCimtypeSint64:
if VarIsArray(Variable.Get_Value) then
begin
if VarArrayHighBound(Variable.Get_Value, 1) > 0 then
for Count := 1 to VarArrayHighBound(Variable.Get_Value, 1) do
Result := Result + ' ' + IntToStr(Variable.Get_Value[Count]);
end
else Result := IntToStr(Variable.Get_Value);

wbemCimtypeReal32,
wbemCimtypeReal64:
Result := FloatToStr(Variable.Get_Value);

wbemCimtypeBoolean:
if Variable.Get_Value then Result := 'True' else Result := 'False';

wbemCimtypeString,
wbemCimtypeUint64:
if VarIsArray(Variable.Get_Value) then begin
if VarArrayHighBound(Variable.Get_Value, 1) > 0 then
for Count := 1 to VarArrayHighBound(Variable.Get_Value, 1) do
Result := Result + ' ' + Variable.Get_Value[Count];
end
else
Result := Variable.Get_Value;

wbemCimtypeDatetime:
Result := Variable.Get_Value;
end;
Result:={Variable.Name+' = '+}Result;
except
Result:={Variable.Name+}' = Type de donnée inconnue';
end;
end;
end;


Function WMIExecuteSQL (NomPC,RequeteSQL : String): TStringList;
var
wmiLocator: TSWbemLocator;
wmiServices: ISWbemServices;
wmiObjectSet: ISWbemObjectSet;
wmiObject: ISWbemObject;
propSet: ISWbemPropertySet;
wmiProp: ISWbemProperty;
propEnum,
Enum: IEnumVariant;
ovVar: OleVariant;
lwValue: LongWord;
sValue: String;
begin
wmiLocator := TSWbemLocator.Create(nil);
try
wmiServices := wmiLocator.ConnectServer(NomPC,'root\cimv2','','','', '', wbemConnectFlagUseMaxWait, nil);
wmiObjectSet := wmiServices.ExecQuery(RequeteSQL,'WQL',wbemFlagReturnImmediately+ wbemFlagForwardOnly, nil);
Result := TStringList.Create;
Enum := (wmiObjectSet._NewEnum) as IEnumVariant;
while (Enum.Next(1, ovVar, lwValue) = S_OK) do begin
wmiObject := IUnknown(ovVar) as SWBemObject;
propSet := wmiObject.Properties_;
propEnum := (propSet._NewEnum) as IEnumVariant;
Try
while (propEnum.Next(1, ovVar, lwValue) = S_OK) do begin
wmiProp := IUnknown(ovVar) as SWBemProperty;
if wmiProp.Get_Value <> Null then
begin
try
sValue := VarToStr(wmiProp.Get_Value);
if sValue='' then sValue := SWBempropertyToStr(wmiProp);
except
Try
sValue := SWBempropertyToStr(wmiProp);
except
sValue := '<Null>';
end;
end;
end
else sValue := '<Null>';
Result.Add(wmiProp.Name + ' = ' + sValue);
end;
except
end;
end;
finally
wmiObject:=nil;wmiObjectSet:=nil;wmiServices:=nil;Enum :=nil;
wmiLocator.Disconnect;propSet:=nil;wmiProp:=nil;propEnum:=nil;ovVar:='';
wmiLocator.Free;
end;
end;


Pour l'utilisation :

Procedure Test;
begin
//Par exemple :
Showmessage (WMIExecuteSQL ('.',select * from Win32_OperatingSystem').Text );
end;

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 137 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_fjohnny
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
23
0
Merci
Locas : il n'est pas nécessaire de poster un message vide pour être informé des réponses à cette question. Regarde bien en haut des pages du forum et tu verras le message suivant :
(NOUVEAU) Ce sujet vous interesse ? Vous souhaitez recevoir mail lorsque qu'une réponse est faite sur ce sujet ?
[# Alors cliquez ici pour être averti]

C'est tout ce qu'il y a à faire.
Cela dit, comme la demande date d'octobre 2003, les chances d'obtenir une réponse sont bien minces


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.pourflorenceethussein.org
Commenter la réponse de cs_Delphiprog