Himadri, le wich code utilise la référence en ManagementObjectSearcher
Delphi Prism
, la ManagementObjectSearcher
est une classe .Net pour récupérer des informations sur le WMI
. vous pouvez accéder à WMI depuis Delphi en utilisant 3 alternatives.
1) en important le composant Microsoft WMIScripting Library
depuis Component-> Import Component, puis en sélectionnant Importer la bibliothèque de types.
program WMI_Test;
{$APPTYPE CONSOLE}
uses
ActiveX,
Variants,
SysUtils,
WbemScripting_TLB in '..\..\..\Documents\RAD Studio\5.0\Imports\WbemScripting_TLB.pas';//
Procedure AccessWMI;
var
WMIServices : ISWbemServices;
Root : ISWbemObjectSet;
Item : Variant;
begin
WMIServices := CoSWbemLocator.Create.ConnectServer('.', 'root\cimv2','', '', '', '', 0, nil);
Root := WMIServices.ExecQuery('Select Caption FROM Win32_OperatingSystem','WQL', 0, nil);
Item := Root.ItemIndex(0);
Writeln(VarToStr(Item.Caption));
end;
begin
try
CoInitialize(nil);
AccessWMI;
Readln;
CoUninitialize;
except
on E:Exception do
Begin
CoUninitialize;
Writeln(E.Classname, ': ', E.Message);
Readln;
End;
end;
end.
2) utiliser un COM liaison tardive
program WMI_Test;
{$APPTYPE CONSOLE}
uses
SysUtils
,ActiveX
,ComObj
,Variants;
Procedure AccessWMI;
var
objWMIService : OLEVariant;
colItems : OLEVariant;
colItem : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
function GetWMIObject(const objectName: String): IDispatch;
var
chEaten: Integer;
BindCtx: IBindCtx;
Moniker: IMoniker;
begin
OleCheck(CreateBindCtx(0, bindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;
begin
objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
colItems := objWMIService.ExecQuery('SELECT Caption FROM Win32_OperatingSystem','WQL',0);
oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
if oEnum.Next(1, colItem, iValue) = 0 then
Writeln(VarToStr(colItem.Caption));
end;
begin
try
CoInitialize(nil);
try
AccessWMI;
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
Begin
Writeln(E.Classname, ': ', E.Message);
Readln;
End;
end;
end.
3) en utilisant une bibliothèque WMI, comme le GLibWMI VCL Component Library
vous pouvez trouver plusieurs échantillons dans SO sur le WMI and Delphi
Je suppose que vous avez essayé l'exemple avec Delphi * Prism *? –
@Lieven, j'utilise 'delphi 2007'. Désolé, j'ai oublié de mentionner à ce sujet. – Himadri
Donc, une telle chose n'existe pas dans Delphi 2007? – Himadri