koiji
Cita:
Empezado por koiji
...usted cree que me pueda dar un ejemplo...
|
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ActiveX, ComObj;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
ComboBox1: TComboBox;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
public
end;
var
Form1: TForm1;
WMIList : TStringList;
implementation
{$R *.dfm}
procedure GetSystemInformation(ClassName, NameSpace : String; S : TStrings);
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet : OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
FProperties : OLEVariant;
oEnumProp : IEnumvariant;
iValueProp : LongWord;
FPropObj : OLEVariant;
SQLWMI : String;
AuxString : String;
i : Integer;
begin;
SQLWMI := 'SELECT * FROM ' + ClassName;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('localhost', NameSpace, '', '');
FWbemObjectSet := FWMIService.ExecQuery(SQLWMI,'WQL',0);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
S.Clear;
while (oEnum.Next(1, FWbemObject, iValue) = 0) do
begin
FProperties := FWbemObject.Properties_;
oEnumProp := IUnknown(FProperties._NewEnum) as IEnumVariant;
S.BeginUpdate;
S.Add(StringOfChar('-', 100));
while oEnumProp.Next(1, FPropObj, iValueProp) = 0 do
begin
if VarIsArray(FPropObj.Value) then
begin
for i:= VarArrayLowBound(FPropObj.Value,1) to VarArrayHighBound(FPropObj.Value,1) do
AuxString := AuxString + ' ' + String(FPropObj.Value[i]);
S.Add(FPropObj.Name + ' : ' + AuxString);
end
else if not VarIsNull(FPropObj.Value) then
S.Add(FPropObj.Name + ' : ' + String(FPropObj.Value))
else
S.Add(FPropObj.Name + ' : ' + 'Empty');
FPropObj := Unassigned;
end;
S.Add(StringOfChar('-', 100));
S.EndUpdate;
FWbemObject := Unassigned;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
begin
WMIList := TStringList.Create;
WMIList.Add('Win32_BIOS' + '=' + 'root\CIMV2');
WMIList.Add('CIM_Processor' + '=' + 'root\CIMV2');
WMIList.Add('Win32_MotherboardDevice' + '=' + 'root\CIMV2');
WMIList.Add('Win32_PhysicalMemory' + '=' + 'root\CIMV2');
WMIList.Add('Win32_USBHub' + '=' + 'root\CIMV2');
WMIList.Add('Win32_Product' + '=' + 'root\CIMV2');
WMIList.Add('Win32_CDROMDrive' + '=' + 'root\CIMV2');
WMIList.Add('Win32_BaseBoard' + '=' + 'root\CIMV2');
for i := 0 to WMIList.Count - 1 do
ComboBox1.Items.Add(WMIList.Names[i]);
Memo1.ScrollBars := ssBoth;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ClassName, NameSpace : String;
begin
ClassName := WMIList.Names[ComboBox1.ItemIndex];
NameSpace := WMIList.ValueFromIndex[ComboBox1.ItemIndex];
Button1.Enabled := False;
GetSystemInformation(ClassName, NameSpace, Memo1.Lines);
Button1.Enabled := True;
Memo1.SelStart := 0;
Memo1.SelLength := 0;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WMIList.Free;
Action := caFree;
end;
end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32,
permite obtener información de varias clases de información de Windows por medio de WMI (Windows Management Instrumentation), como se muestra en la siguiente imagen:
Nota: Este ejemplo
sigue la misma linea de resolución (Uso de WMI) que origino este hilo.
Revisa la siguiente información:
Espero sea útil
Nelson.