Delphi Wmi Class Generator は、 WMI (Windows Management Instrumentation) にアクセスするための完全に文書化された Object Pascal クラスを作成するアプリケーションです。
生成されたコードは、Delphi 7、2005、BDS/Turbo 2006、RAD Studio 2007-2010、XE-XE7、Free Pascal Compiler 2.2.4 (win32) と互換性があります。
Delphi 2005 以降で利用できるヘルプ インサイト機能と互換性のある、完全に文書化されたクラスを作成します。
注:メソッド、パラメータ、およびプロパティの説明の言語は、ユニットを生成するウィンドウの言語によって異なります。
アプリケーションは、すぐに使用できるコードを約 99% の速度で生成します。ただし、一部の WMI クラスでは、メタデータが間違った形式で公開されているか、メタデータの構造がオブジェクト パスカル コードの作成に使用されるアルゴリズムと互換性がありません。そのような場合は、コードに手動でパッチを適用する必要があります。
このページでは問題のあるクラスを見つけることができます。別のオプションは、生成されたパッチ適用済みクラスをリポジトリから直接ダウンロードすることです。
このツールは、WMI クラスに格納されているメタデータ (プロパティ、メソッド、修飾子、有効な値、説明) を抽出して解析し、Object Pascal 互換クラスを再作成します。
アプリケーションによって生成される各 Object pascal クラスは基本クラス TWmiClass から派生し、このクラスは wmi へのアクセスをカプセル化し、呼び出しクラスによって返された値 (OleVariant) をネイティブ型に変換し、その値を内部コレクション (バッファ) に格納します。プロパティとインスタンスのアドレスの情報。
TWmiClass クラスは 2 つのモードでコンパイルできます。
Microsoft WMI スクリプティング V1.2 ライブラリの使用
このラッパー (WbemScripting_TLB) は Delphi コンパイラによって生成され、このオプションにより WMI への初期アクセスが向上します (このオプションは FPC と互換性がありません)。このモードを使用する場合は、プロジェクトに WbemScripting_TLB ユニットを含める必要があります。
遅延バインディングの使用
このオプションは、小さな exe ファイルを生成する必要がある場合に便利です。最初の実行ではパフォーマンスが少し遅くなります。
これら 2 つのモードのどちらかを選択するには、uWmiDelphiClass ユニットで次の行をコメント化するか、コメント化を解除する必要があります。
{ $DEFINE WbemScripting_TLB }
アプリケーションのメイン ウィンドウで、生成する名前空間とクラスを選択し (デフォルトでは、WMI 名前空間のすべてのクラスが選択されています)、[ユニットの生成] ボタンを押すと、ツールによって次の場所にフォルダーが作成されます。名前空間の名前を持つ exe と、このフォルダー内に、テスト コンソール プロジェクト、uWmiDelphiClass.pas ファイルのコピー、および選択したクラスが作成されます。各クラスは、「u」文字に Wmi クラスの名前を加えた名前を持つ個別のユニットに格納されます。たとえば、Win32_BIOS クラスのユニット名はuWin32_BIOS.pasになります。
ソース リポジトリでは、生成されたクラスの使用法の一連のデモを見つけることができます。
Win32_BaseBoard WMI クラスを使用する、この非常に単純なコンソール アプリケーションを確認してください。
program TestWin32_BaseBoard;
{ $APPTYPE CONSOLE }
uses
SysUtils,
uWin32_BaseBoard in ' ....root_CIMV2uWin32_BaseBoard.pas ' ,
uWmiDelphiClass in ' ....uWmiDelphiClass.pas ' ; // the base class
procedure TestBaseBoard ;
var
BaseBoard : TWin32_BaseBoard;
begin
BaseBoard:=TWin32_BaseBoard.Create;
try
Writeln( ' Base Board Info ' );
Writeln( ' --------------- ' );
Writeln( ' Manufacturer ' +BaseBoard.Manufacturer);
Writeln( ' Model ' +BaseBoard.Model);
Writeln( ' SKU ' +BaseBoard.SKU);
Writeln( ' SerialNumber ' +BaseBoard.SerialNumber);
Writeln( ' PartNumber ' +BaseBoard.PartNumber);
Writeln( ' Tag ' +BaseBoard.Tag);
Readln;
finally
BaseBoard.Free;
end ;
end ;
begin
try
TestBaseBoard;
except
on E:Exception do
begin
Writeln(E.Classname, ' : ' , E.Message);
Readln;
end ;
end ;
end .
このツールは Delphi XE を使用してコンパイルされました。
Win32_Share WMI クラスのアプリケーションによって作成されたソース コード サンプル。
// / <summary>
// / Unit generated using the Delphi Wmi class generator tool, Copyright Rodrigo Ruz V. 2010
// / Application version 0.1.0.113
// / WMI version 7600.16385
// / Creation Date 23-12-2010 22:39:55
// / Namespace rootCIMV2 Class Win32_Share
// / MSDN info about this class http://msdn2.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/Win32_Share.asp
// / </summary>
{ $IFDEF FPC }
{ $MODE DELPHI } { $H+ }
{ $DEFINE OLD_DELPHI }
{ $ENDIF }
unit uWin32_Share;
interface
uses
Classes,
Activex,
Variants,
ComObj,
uWmiDelphiClass;
type
{ $IFDEF FPC }
Cardinal=Longint;
Int64=Integer;
Word=Longint;
{ $ENDIF }
{ $IFNDEF FPC }
{ $IF CompilerVersion <= 15 }
{ $DEFINE OLD_DELPHI }
{ $IFEND }
{ $ENDIF }
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / The Win32_Share class represents a shared resource on a Win32 system. This may be a disk drive, printer, interprocess communication, or other shareable device.
// / Example: C:PUBLIC.
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
TWin32_Share= class (TWmiClass)
private
FAccessMask : Cardinal;
FAllowMaximum : Boolean;
FCaption : String;
FDescription : String;
FInstallDate : TDateTime;
FMaximumAllowed : Cardinal;
FName : String;
FPath : String;
FStatus : String;
FType : Cardinal;
public
constructor Create(LoadWmiData : boolean=True); overload;
destructor Destroy;Override;
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / This property has been deprecated in favour of the GetAccessMask method of this
// / class due to the expense of calling GetEffectiveRightsFromAcl. The value will
// / be set to NULL
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
property AccessMask : Cardinal read FAccessMask;
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / The AllowMaximum property indicates whether the number of concurrent users for this resource has been limited.
// / Values: TRUE or FALSE. A value of TRUE indicates the number of concurrent users of this resource has not been limited and the value in the MaximumAllowed property is ignored.
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
property AllowMaximum : Boolean read FAllowMaximum;
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / The Caption property is a short textual description (one-line string) of the
// / object.
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
property Caption : String read FCaption;
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / The Description property provides a textual description of the object.
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
property Description : String read FDescription;
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / The InstallDate property is datetime value indicating when the object was
// / installed. A lack of a value does not indicate that the object is not installed.
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
property InstallDate : TDateTime read FInstallDate;
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / The MaximumAllowed property indicates the limit on the maximum number of users allowed to use this resource concurrently. The value is only valid if the AllowMaximum member set to FALSE
// / Example: 10.
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
property MaximumAllowed : Cardinal read FMaximumAllowed;
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / The Name property indicates the alias given to a path set up as a share on a Win32 system.
// / Example: public.
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
property Name : String read FName;
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / The Path property indicates the local path of the Win32 share.
// / Example: C:Program Files
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
property Path : String read FPath;
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / The Status property is a string indicating the current status of the object.
// / Various operational and non-operational statuses can be defined. Operational
// / statuses are "OK", "Degraded" and "Pred Fail". "Pred Fail" indicates that an
// / element may be functioning properly but predicting a failure in the near
// / future. An example is a SMART-enabled hard drive. Non-operational statuses can
// / also be specified. These are "Error", "Starting", "Stopping" and "Service". The
// / latter, "Service", could apply during mirror-resilvering of a disk, reload of a
// / user permissions list, or other administrative work. Not all such work is on-
// / line, yet the managed element is neither "OK" nor in one of the other states.
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
property Status : String read FStatus;
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / The Type property specifies the type of resource being shared. Types include
// / disk drives, print queues, interprocess communications (IPC), and general
// / devices.
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
property { $IFDEF OLD_DELPHI } _Type { $ELSE } & Type { $ENDIF } : Cardinal read FType;
function Create ( const Access : OleVariant; const Description : String; const MaximumAllowed : Cardinal; const Name : String; const Password : String; const Path : String; const { $IFDEF OLD_DELPHI } _Type { $ELSE } & Type { $ENDIF } : Cardinal): Integer;overload;
function SetShareInfo ( const Access : OleVariant; const Description : String; const MaximumAllowed : Cardinal): Integer;
function GetAccessMask : Integer;
function Delete : Integer;
procedure SetCollectionIndex (Index : Integer); override;
end ;
{ $IFDEF UNDEF }{ $REGION 'Documentation' }{ $ENDIF }
// / <summary>
// / Return the description for the value of the property TWin32_Share.Type
// / </summary>
{ $IFDEF UNDEF }{ $ENDREGION }{ $ENDIF }
function GetTypeAsString ( const APropValue:Cardinal) : string;
implementation
function GetTypeAsString ( const APropValue:Cardinal) : string;
begin
Result:= ' ' ;
case APropValue of
0 : Result:= ' Disk Drive ' ;
1 : Result:= ' Print Queue ' ;
2 : Result:= ' Device ' ;
3 : Result:= ' IPC ' ;
2147483648 : Result:= ' Disk Drive Admin ' ;
2147483649 : Result:= ' Print Queue Admin ' ;
2147483650 : Result:= ' Device Admin ' ;
2147483651 : Result:= ' IPC Admin ' ;
end ;
end ;
{ TWin32_Share }
constructor TWin32_Share.Create(LoadWmiData : boolean=True);
begin
inherited Create(LoadWmiData, ' rootCIMV2 ' , ' Win32_Share ' );
end ;
destructor TWin32_Share.Destroy;
begin
inherited ;
end ;
procedure TWin32_Share.SetCollectionIndex (Index : Integer);
begin
if (Index>= 0 ) and (Index<=FWmiCollection.Count- 1 ) and (FWmiCollectionIndex<>Index) then
begin
FWmiCollectionIndex:=Index;
FAccessMask := VarCardinalNull( inherited Value [ ' AccessMask ' ]);
FAllowMaximum := VarBoolNull( inherited Value [ ' AllowMaximum ' ]);
FCaption := VarStrNull( inherited Value [ ' Caption ' ]);
FDescription := VarStrNull( inherited Value [ ' Description ' ]);
FInstallDate := VarDateTimeNull( inherited Value [ ' InstallDate ' ]);
FMaximumAllowed := VarCardinalNull( inherited Value [ ' MaximumAllowed ' ]);
FName := VarStrNull( inherited Value [ ' Name ' ]);
FPath := VarStrNull( inherited Value [ ' Path ' ]);
FStatus := VarStrNull( inherited Value [ ' Status ' ]);
FType := VarCardinalNull( inherited Value [ ' Type ' ]);
end ;
end ;
// static, OutParams=1, InParams>0
function TWin32_Share.Create ( const Access : OleVariant; const Description : String; const MaximumAllowed : Cardinal; const Name : String; const Password : String; const Path : String; const { $IFDEF OLD_DELPHI } _Type { $ELSE } & Type { $ENDIF } : Cardinal): Integer;
var
objInParams : OleVariant;
objOutParams : OleVariant;
begin
objInParams := GetInstanceOf.Methods_.Item( ' Create ' ).InParameters.SpawnInstance_();
objInParams.Properties_.Item( ' Access ' ). Value := Access;
objInParams.Properties_.Item( ' Description ' ). Value := Description;
objInParams.Properties_.Item( ' MaximumAllowed ' ). Value := MaximumAllowed;
objInParams.Properties_.Item( ' Name ' ). Value := Name ;
objInParams.Properties_.Item( ' Password ' ). Value := Password;
objInParams.Properties_.Item( ' Path ' ). Value := Path;
objInParams.Properties_.Item( ' Type ' ). Value := { $IFDEF OLD_DELPHI } _Type { $ELSE } & Type { $ENDIF } ;
objOutParams := WMIService.ExecMethod(WmiClass, ' Create ' , objInParams, 0 , GetNullValue);
Result := VarIntegerNull(objOutParams.ReturnValue);
end ;
// not static, OutParams=1, InParams>0
function TWin32_Share.SetShareInfo ( const Access : OleVariant; const Description : String; const MaximumAllowed : Cardinal): Integer;
var
ReturnValue : OleVariant;
begin
ReturnValue := GetInstanceOf.SetShareInfo(Access,Description,MaximumAllowed);
Result := VarIntegerNull(ReturnValue);
end ;
// not static, OutParams=1, InParams=0
function TWin32_Share.GetAccessMask : integer;
var
ReturnValue : OleVariant;
begin
ReturnValue := GetInstanceOf.GetAccessMask;
Result := VarIntegerNull(ReturnValue);
end ;
// not static, OutParams=1, InParams=0
function TWin32_Share.Delete : integer;
var
ReturnValue : OleVariant;
begin
ReturnValue := GetInstanceOf.Delete;
Result := VarIntegerNull(ReturnValue);
end ;
end .
インストーラーをお探しですか?リリースエリアを確認する