Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-04-2010
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
WMI - Obteniendo el numero de serie de la placa base.

Hola,

estoy tratando de leer el Nº de serie de la placa base de cualquier ordenador con WMI (teoricamente, todos desde W2000).

Se que Neftali tiene unos fantasticos componentes, pero, los he descargado y parece que solo están para Delphi2007 (no he probado a instalar y testear en Delphi2010) y, además, es que solo quiero saber el id de la placa.

Esto es lo que tengo (tras importar la libreria de tipos -type library-):

Código Delphi [-]
function GetMotherBoardSerial:string;
var
  WMIServices : ISWbemServices;
  Root        : ISWbemObjectSet;
  Item        : Variant;
begin
  WMIServices := CoSWbemLocator.Create.ConnectServer('.', 'root\cimv2','', '', '', '', 0, nil);
  Root  := WMIServices.ExecQuery('Select SerialNumber From Win32_BaseBoard','WQL', 0, nil);
  Item := Root.Item('Base Board',0);   <<--- aquí el error...
  Result:=VarToStr(Item.SerialNumber);
end;

En la línea que marca el error, ya he probado de todo. El código está recogido de algún sitio (que no consigo encontrar de nuevo).

A ver si a alguien se le ocurre algo.

Saludos y gracias anticipadas.
Responder Con Cita
  #2  
Antiguo 12-04-2010
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Hola.... alguna idea sobre esto ?

Muchas gracias y perdón por la insistencia...
Responder Con Cita
  #3  
Antiguo 12-04-2010
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Bueno, solucionado:

http://stackoverflow.com/questions/2...-number-delphi

Saludos.
Responder Con Cita
  #4  
Antiguo 12-04-2010
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Si yo hubiera visto este mensaje antes, al igual que en este momento te hubiera recomendado echarle un vistazo a los componentes basados en WMI de Neftali... en http://www.clubdelphi.com/foros/showthread.php?t=65935
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 13-04-2010
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Si, lo decia en mi primer mensaje de este hilo. El asunto es que me corria un poco de prisa y al descargar los GlibWMI, vi que solo había paquete para Delphi 2007, con lo que supuse que no estaban listos para Delphi 2010.

Saludos.
Responder Con Cita
  #6  
Antiguo 08-09-2011
ptorres ptorres is offline
Registrado
 
Registrado: mar 2007
Posts: 6
Poder: 0
ptorres Va por buen camino
Clase para sacar la informacion de la Placa Base

Amigos esta es una clase para sacar los datos de la tarjeta madre y el CPU no se si les sirva la acabo de hacer.

espero que les sirva

Código Delphi [-]
unit clSistema;

interface

uses Registry,Windows,SysUtils;
type
  TBIOS = class
    constructor create;
   Public
    Fabricante,ProductoBase,VersionTarjeta,
    Fecha,Vendedor,VersionBios,FamiliaSistema,FabricanteSistema,
    NombreProducto,SKU,VersionSistema:String;
  end;

  TCPU = class
   constructor create(NoCPU : Integer);
   Public
    Identificador,NombreProcesador,Vendedor,ActualizacionMicroCode:String;
  end;
  TSistema = class
   constructor create;
   destructor Destroy;
  Public
   Bios : TBios;
   CPU1  : TCPU;
   CPU2  : TCPU;
   CPU3  : TCPU;
   CPU4  : TCPU;
  end;

implementation
const vBios: string = '\HARDWARE\DESCRIPTION\System\BIOS';
const vCPU: string = '\HARDWARE\DESCRIPTION\System\CentralProcessor';

////////////////////
////////// clase sistema
///////////////////

constructor TSistema.create;
Begin
 Bios:=TBios.create;
 CPU1:=TCPU.create(0);
 CPU2:=TCPU.create(1);
 CPU3:=TCPU.create(2);
 CPU4:=TCPU.create(3);
End;

destructor TSistema.Destroy;
Begin
 Bios.Free;
 CPU1.Free;
 CPU2.Free;
 CPU3.Free;
 CPU4.Free;
End;
////////////////////
////////// clase bios
///////////////////

constructor TBIOS.create;
var Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.Rootkey:= HKEY_LOCAL_MACHINE;
    Reg.OpenKey(vBios, False);
    Fabricante:=Reg.ReadString('BaseBoardManufacturer');
    ProductoBase:=Reg.ReadString('BaseBoardProduct');
    VersionTarjeta:=Reg.ReadString('BaseBoardVersion');
    Fecha:=Reg.ReadString('BIOSReleaseDate');
    Vendedor:=Reg.ReadString('BIOSVendor');
    VersionBios:=Reg.ReadString('BIOSVersion');
    FamiliaSistema:=Reg.ReadString('SystemFamily');
    FabricanteSistema:=Reg.ReadString('SystemManufacturer');
    NombreProducto:=Reg.ReadString('SystemProductName');
    SKU:=Reg.ReadString('SystemSKU');
    VersionSistema:=Reg.ReadString('SystemVersion');
  finally
    Reg.Free;
  end;
End;
////////////////////
////////// clase CPU
///////////////////

constructor TCPU.create;
var Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.Rootkey:= HKEY_LOCAL_MACHINE;
    if Reg.OpenKey(vCPU+'\'+IntToStr(NoCPU), False) then
     Begin
      Identificador:=Reg.ReadString('Identifier');
      NombreProcesador:=Reg.ReadString('ProcessorNameString');
      Vendedor:=Reg.ReadString('VendorIdentifier');
      ActualizacionMicroCode:=Reg.ReadString('MicrocodeUpdateStatus');
     End
    else
     Begin
      Identificador:='No Presente';
      NombreProcesador:='No Presente';
      Vendedor:='No Presente';
      ActualizacionMicroCode:='No Presente';
     End;
  finally
    Reg.Free;
  end;
End;

end.
Responder Con Cita
  #7  
Antiguo 08-09-2011
ptorres ptorres is offline
Registrado
 
Registrado: mar 2007
Posts: 6
Poder: 0
ptorres Va por buen camino
Clase para sacar la informacion de la Placa Base

Comenten que les parece gracias
Responder Con Cita
  #8  
Antiguo 04-08-2014
koiji koiji is offline
Miembro
 
Registrado: oct 2007
Posts: 21
Poder: 0
koiji Va por buen camino
Ejemplo de uso

Hola ptorres pues no lo e podido probar usted cree que me pueda dar un ejemplo de uso para poder ver su funcionamiento porfabor Muchas Gracias por su ayuda
Responder Con Cita
  #9  
Antiguo 04-08-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración

¿Por qué no lo has podido probar?, ¿por qué solicitas un ejemplo si ahí arriba tienes el código y solamente tienes que copiar y pegar?
Responder Con Cita
  #10  
Antiguo 04-08-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola koiji.
Cita:
Empezado por koiji Ver Mensaje
Hola ptorres pues no lo e podido probar usted cree que me pueda dar un ejemplo de uso para poder ver su funcionamiento porfabor Muchas Gracias por su ayuda
Bueno, si no lo has podido probar... debe ser difícil ver su funcionamiento

Con el permiso de ptorres, pongo un ejemplo del uso:
(File->New->Unit. (borrar, copiar y pegar el código de ptorres)
Código Delphi [-]
...
implementation

uses clSistema;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TBIOS.create do
  try
    Memo1.Clear;
    Memo1.Lines.Add(Fabricante);
    Memo1.Lines.Add(ProductoBase);
    Memo1.Lines.Add(VersionTarjeta);
    Memo1.Lines.Add(Fecha);
    Memo1.Lines.Add(Vendedor);
    Memo1.Lines.Add(VersionBios);
    Memo1.Lines.Add(FamiliaSistema);
    Memo1.Lines.Add(FabricanteSistema);
    Memo1.Lines.Add(NombreProducto);
    Memo1.Lines.Add(SKU);
    Memo1.Lines.Add(VersionSistema);
  finally
    Free;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 04-08-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por ptorres Ver Mensaje
Comenten que les parece gracias
Hola ptorres.

No había visto el mensaje, acabo de probar el código, me parece muy bueno y funciona correctamente

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 06-08-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 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
  #13  
Antiguo 06-08-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Casi me olvido...

No me hubiera perdonado dejar sin mención a la excelente biblioteca de componentes WMI, autoría de nuestro compañero Neftali: GLibWMI

Saludos

Edito: Creo que me pegó el alzheimer... Muy bueno el ejemplo Nelson
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 06-08-2014 a las 06:04:25.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Placa Base Io Varios 3 12-07-2007 20:01:18
Saber el número de ranuras PCI el la placa base serebi Varios 4 07-02-2006 22:17:06
Saber el número de serie de la placa fer21unmsm Varios 3 30-12-2005 19:36:51
Número de Serie HDD en Red ogorut Varios 0 04-12-2003 13:50:40
Fuera de tópico (Placa base) mosorio Varios 3 05-08-2003 14:21:42


La franja horaria es GMT +2. Ahora son las 00:51:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi