22nd Embarcadero Developer Camp G6



Similar documents
21st Embarcadero Developer Camp

fiš„v3.dvi

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  


第10回 コーディングと統合(WWW用).PDF

データアダプタ概要

xl 1 program Othello6; 2 {$APPTYPE CONSOLE} 3 uses SysUtils; 4 5 type 6 TMasuNo = 0..99; // 7 TYouso = (Soto,Kara,Kuro,Siro); // 8 TBan = array [TMasu

Microsoft PowerPoint ppt

1. A0 A B A0 A : A1,...,A5 B : B1,...,B

21st Embarcadero Developer Camp T8

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

KeyWeb Creator 概要 What s KeyWeb Creator? 動的なホームページを作成するためのツール!! 従来の Web ページ DB を利用した Web ページ <HTML> <HEAD> <TITLE>show_book</TITLE> </HEAD> <BODY> <DI

橡挿入法の実践

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

ファイル操作-インターネットキャッシュ

ASP.NET 2.0 Provider Model 概要

B Simon (Trump ) SimonU.pas SimonP.dpr Name FormSimon Caption Position podesktopcenter uses Windows, Messages, SysUtils,

橡ソート手順比較

Embarcadero Developer Camp


PowerPoint プレゼンテーション

1 シミュレーションとは何か?

早分かりS2Dao

Java講座

L N P Y F C T V W Z I X Pentomino Form Name Caption Position FormMain podesktopcenter

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

K227 Java 2

知って得する!現役ヘルプデスクが答えるDelphiテクニカルエッセンス

プログラミング基礎I(再)

スライド 1

PowerPoint プレゼンテーション

知って得する!現役ヘルプデスクが答えるDelphiテクニカルエッセンス 8.0

2005 D Pascal CASL ( ) Pascal C 3. A A Pascal TA TA TA

syspro-0405.ppt

B 5 (2) VBA R / B 5 ( ) / 34

17th Embarcadero Developer Camp

Prog2_12th

10th Developer Camp - B5

JEB Plugin 開発チュートリアル 第4回

Pascal Pascal Free Pascal CPad for Pascal Microsoft Windows OS Pascal

JavaScript 1.! DOM Ajax Shelley Powers,, JavaScript David Flanagan, JavaScript 2

Microsoft PowerPoint - ruby_instruction.ppt

Dolteng Scaffoldに対する機能追加とマスタ-ディテールScaffoldの紹介

5th CodeGear Developer Camp [A6]

Java演習(4) -- 変数と型 --

ファイル操作-バイナリファイル

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

「DataSnapユースケース研究」 多層技術の概要と最適化、実践テクニック

2009 D Pascal CASL II ( ) Pascal C 3. A A Pascal TA TA

構造体

21st Embarcadero Developer Camp T8

2011 D Pascal CASL II ( ) Pascal C 3. A A Pascal TA TA enshu-

バスケットボール

とても使いやすい Boost の serialization

CodeGear Developer Camp

25th Developer Camp

CodeIgniter Con 2011, Tokyo Japan, February

e10s におけるプロセス間通信の基本 219 HACK #34 Components.manager.removeBootstrappedManifestLocati on() function shutdown(adata, areason) { const IOService =

f5

Java updated

untitled

1. 入力画面

8 if switch for while do while 2

(Basic Theory of Information Processing) Fortran Fortan Fortan Fortan 1


PowerPoint プレゼンテーション

Microsoft Word _VBAProg1.docx

問題1 以下に示すプログラムは、次の処理をするプログラムである

sinfI2005_VBA.doc

Q&A集

SmartBrowser_document_build30_update.pptx

プログラミングA

知って得する!現役ヘルプデスクが答えるDelphiテクニカルエッセンス 9.0

(Microsoft Word \203v\203\215\203O\203\211\203~\203\223\203O)

新・明解Java入門

医療者のための情報技術入門第 9 回プログラムがはたらくしくみを学ぶ (2) 日紫喜光良 概要 1. はじめに- 具体例から ここから Javascript のプログラミング入門 次はどうする--

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

24th Developer Camp B1

開発者が知りたい実践プログラミングテクニック! ~明日から使えるテクニック集~

Excel Excel Excel = Excel ( ) 1

本セミナーの目的 Firebird の利点を最も有効に利用できる開 発環境は Delphi です 理由その 1 ミドルウェアの充実 理由その 2 データベース対応機能の充実 理由その 3 国内 海外での豊富な実績の蓄積

16 (2) 23 - <div class="col-12 col-md-4"> </div> 23 + <div class="col-12 col-md-4 bg-info text-white text-md-right"> </div> HTML bg-info #17

Formal Engineering Methods for Software Development --An Introduction to SOFL--

untitled

14th Developer Camp

d_appendixB-asp10appdev.indd

TestDesign for Web

Microsoft PowerPoint - はじめてのDataSnapアプリケーション_

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

プログラミングA

PowerPoint プレゼンテーション


GET Vol.8

JEB Plugin 開発チュートリアル 第3回

XpressMemoForDash.dvi

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

paper.pdf

ALG ppt

For_Beginners_CAPL.indd

Transcription:

17 Th Developer Camp ライトニングトーク WMI を もっと使おう! 株式会社シリアルゲームズ 取締役細川淳 1

WMI? WMI とは Windows Management Instrumentation の略 Windows Driver Model の拡張の一種 Windows が管理する情報へのインターフェース 例えば CPU の情報であったり 物理ハードディスクの情報などなどが取れます WMI の各クラスにはプロパティ メソッド イベントがある 今回はプロパティの取得方法を紹介します 2

WMI Classes 代表的な Class は Win32_Process Win32_OperatingeSystem Win32_ComputerSystem Win32_Processor Win32_Product Win32_BIOS などなど 3

使い方 JScript や VBScript では SQL に似た構文で取得可能です この構文を WQL (WMI Query Language といいます WQL を使わない取得方法もあります ( 次ページ JScript での例 var locator = WScript.CreateObject("WbemScripting.SWbemLocator"; var service = locator.connectserver(; var processorinfo = service.execquery("select * FROM Win32_Processor"; var e = new Enumerator(processorInfo; var info = ""; while (!e.atend( { var item = e.item(; info += "Manufacture: " + item.manufacturer + " nname: " + item.name + " n n"; e.movenext(; } WScript.Echo(info; Echo で表示された内容 4

使い方 Delphi でも WQL を使えますが ここでは普通にプログラムで取得する方法を紹介します 1. IWbemServices インターフェースを実装したオブジェクトを取得する Wbem とは Web-Based Enterprise Management の略 分散コンピューティング環境の管理を統合するために開発されたシステム管理技術群の名称 (wikipedia より 2. 取得した Services に欲しいクラスの名前を渡して EnumObject を取得する 3. EnumObject から値を取得する 5

WMI Property の取得 function GetWMIProperty( const iclassname: String; const ipropname: array of String; const iongetprop: TInnerGetPropEvent; const iappdata: Boolean; var WbemServices: IWbemServices; EnumWbemClassObject: IEnumWbemClassObject; begin Result := False; // Get WbemServices if (not GetWbemServices(WbemServices then Exit; // Get EnumWbem if ( Failed( WbemServices.CreateInstanceEnum( PWideChar(WideString(iClassName, WBEM_FLAG_SHALLOW or WBEM_FLAG_FORWARD_ONLY, EnumWbemClassObject then Exit; Result := EnumObjects(EnumWbemClassObject, ipropname, iongetprop, iappdata; 6

WbemServices の取得 function GetWbemServices( var owbemservices: IWbemServices: Boolean; var WbemLocator: IWbemLocator; begin Result := False; // Get WbemLocater の取得 if ( Failed( CoCreateInstance( CLSID_WbemLocater, CLSCTX_INPROC_SERVER, IID_IWbemLocator, WbemLocator then Exit; // Get WbemServices の取得 if ( Failed( WbemLocator.ConnectServer( 'root cimv2', 0, owbemservices then Exit; Result := True; 7

EnumObjects の取得 function EnumObjects( const ienumwbemclassobject: IEnumWbemClassObject; const ipropnames: array of String; const iongetprop: TInnerGetPropEvent; const iappdata: Boolean; var WbemObjects: array [0.. WBEM_MAX_OBJECT_NESTING - 1] of IWbemClassObject; COMResult: HResult; PropHolder: OleVariant; Prop: POleVariant; Count: Cardinal; i, j: Integer; Name: String; begin Result := False; Prop := @PropHolder; 8

WMI Property の取得 while ( Succeeded( ienumwbemclassobject.next( WBEM_INFINITE, WBEM_MAX_OBJECT_NESTING, WbemObjects[0], Count do begin if (Count = 0 then Break else Result := True; for i := 0 to Count - 1 do for j := 0 to High(iPropNames do begin Name := ipropnames[j]; WbemObjects[i].Get(PWideChar(WideString(Name, 0, Prop, 0, 0; iongetprop(name, Prop^, iappdata; COMResult := ienumwbemclassobject.skip(wbem_infinite, Count; if (Failed(COMResult or (COMResult = S_FALSE then Break; 9

Processor の製造者名を取ってみる procedure GetPropEvent(const iname: String; const ipropval: Variant; begin Form1.Memo1.Lines.Add(iName + ' = ' + ipropval; procedure TForm1.FormCreate(Sender: TObject; begin GetWMIProperty('Win32_Processor', ['Manufacturer'], GetPropEvent; 10

何に使うのか? PC 環境の正確な把握顧客の PC や社内 PC の状態の把握社内システムの管理者など Get WMI Information の設定ファイル Win32_Processor.Name Win32_Processor.Manufacturer Win32_Processor.MaxClockSpeed Win32_LogicalDisk.Caption Win32_LogicalDisk.VolumeSerialNumber Win32_BIOS.Version Win32_BIOS.SerialNumber Win32_BaseBoard.Version Win32_BaseBoard.SerialNumber Win32_SystemEnclosure.Version この設定ファイルに記載されているプロパティを表示する 12

WMI の結果を HTML 化 13

参考文献 WMI Fun WMI の詳しい解説があるウェブページ http://www.wmifun.net/ WMI Delphi Code Creator 自動的に Delphi/FreePascalCompler/prism/C++Builder 用の WMI コードを生成できるツール ( 情報提供 : 福士様 http://theroadtodelphi.wordpress.com/wmi-delphi-code-creator/ 何コレ! カッコ良い! 14