喫茶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!?

[4967] Re:Windows Management Instrumentation返信 削除
2011/7/1 (金) 00:50:45 Mr.XRAY
▼ Syakeさん

ただいま地球に帰還しました.

> Microsoft WMI Scripting V1.2 Library は不要です。

パクリと言われても分かりませんが,これって,へぇー
>     BindCtx: IBindCtx;
>     Moniker: IMoniker;


こんなインターフェイスがあったんですね.Library不要がいいですね.
これはお蔵入りじゃない,サンプルプログラム集入りかな?
ありがとうございます.
宇宙は広い.デスラー総統にも報告しないと.

[5022] Re:Windows Management Instrumentation返信 削除
2011/7/19 (火) 00:03:36 Mr.XRAY
▼ Syakeさん

これですね.ありがとうございます.
例によって,いつになるか分かりませんが,記事にしたいと思います.
記事の構成を考えているのですが.多分,WMIのサンプルも書く予定ですが,
ちょっと違った構成になると思います.

実は思い出したのです.IMoniker,ワード操作フォームを作成した頃,
こんなのを調べたことがありました.
通常「モニカ」と言って,COMのインターフェイスの1つです.


[7007] Re2:Windows Management Instrumentation返信 削除
2013/8/13 (火) 13:31:54 Mr.XRAY
> 例によって,いつになるか分かりませんが,記事にしたいと思います.

モニカの部分だけ記事にしました.

[960_COM オブジェクトとモニカ] [05_WMI オブジェクトのモニカ文字列]
http://mrxray.on.coocan.jp/Delphi/plSamples/960_COM_Moniker.htm#05


[7014] Re3:Windows Management Instrumentation返信 削除
2013/8/20 (火) 18:55:22 Syake
▼ Mr.XRAYさん
 
> [960_COM オブジェクトとモニカ] [05_WMI オブジェクトのモニカ文字列]
> http://mrxray.on.coocan.jp/Delphi/plSamples/960_COM_Moniker.htm#05


ありがとうございますm(_ _)m

[7018] Re3:Windows Management Instrumentation返信 削除
2013/8/28 (水) 13:51:43 Mr.XRAY
> モニカの部分だけ記事にしました.

続いて CreateOleObject のサンプルの記事も追加しました.

[07_CreateOleObject による WMI オブジェクトの生成]
http://mrxray.on.coocan.jp/Delphi/plSamples/898_WMI_Introduction.htm#07

ところで,某掲示板の
[EXCELでバリアント配列を使ったセル色の設定]
いわた 2013/08/27(火) 22:45:16 書込者ID:[ ""#!! ]

>CopyとPastespecialの組み合わせで書式のコピーを行なうことで、
>以前より速い描画が出来るようになりました。


を今読みました.
COM オブジェクトの処理は,オーバーヘッドがあります.
したがって,一般的には Copy, Paste の方が処理速度が速くなります.
参考までに.
他のアプリからの操作可能にするために COM を実装するのもいいですが,
Winodow API を使用する方がオーバーヘッドが少ないと言えます.
(COM の API も Windows API ?)


INCM/CMT
Cyclamen v3.82