喫茶XRAYトップページ

[スレッド全体
]

[4964] Windows Management Instrumentation返信 削除
2011/6/30 (木) 18:16:04 Syake
こんにちはマスター。
パクリなくりですが、こんなんどでしょうか?
Microsoft WMI Scripting V1.2 Library は不要です。

procedure XXXXX();

 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;

var
  ObjWMIService : OLEVariant;
  oleItemList   : OLEVariant;
  oleItems      : OLEVariant;
  oleItem       : OLEVariant;
  iEnumList     : IEnumVariant;
  iEnum         : IEnumvariant;
  nValue        : LongWord;
begin
  ObjWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
  oleItemList   := objWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem','WQL',0);
  iEnumList := IUnknown(oleItemList._NewEnum) as IEnumVariant;
  while iEnumList.Next(1, oleItems, nValue) = S_OK do
  begin
    iEnum := IUnknown(oleItems.Properties_._NewEnum) as IEnumVariant;
    while (iEnum.Next(1, oleItem, nValue) = S_OK) do
    begin
      if VarIsNull(oleItem) then Continue;
      {適当にデータ処理・・・}
    end;
  end;
end;

DelphiXE Windows7

[4965] Re:Windows Management Instrumentation返信 削除
2011/6/30 (木) 18:41:55 Syake
で、リモートコンピュータは・・・
//ObjLocator.ConnectServer('コンピュータ名', 'root\CIMV2', 'User', 'Pass');

var
  ObjLocator    : OLEVariant;
  ObjWMIService : OLEVariant;
  ・・・・
begin
  ObjLocator      := CreateOleObject('WbemScripting.SWbemLocator');
  {引数が空白なら自分のマシン}
  ObjWMIService   := ObjLocator.ConnectServer('', 'root\CIMV2', '', '');
 oleItemList   := ObjWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive','WQL',0);
  ・・・
 
結果的にGetWMIObjectはいらない。
これでローカルもリモートもOK!?

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82