Ver Mensaje Individual
  #12  
Antiguo 06-08-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
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
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  WMIList : TStringList;

implementation

{$R *.dfm}

// Obtiene Información del Sistema por medio de WMI (Windows Management Instrumentation)
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;

// Inicialización de Clases y Namespaces de Windows Management Instrumentation
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;

// Obtiene Información del Sistema por medio de WMI
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;

// Libera recursos de la Aplicación
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.

Última edición por nlsgarcia fecha: 06-08-2014 a las 04:38:27.
Responder Con Cita