Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Socket Micro
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Socket Micro

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
alpha_soft
Usuario


Registrado: Mar 14, 2008
Mensajes: 1

Asunto: Socket Micro Responder citando

Ahola, alguien podria ayudarme, estoy realizando una aplicacion para obtener los datos de una Pc, y me falta obtener el tipo de socket del microprocesador(478, 775, 370, etc)

gracias!
MensajePublicado:
Vie Mar 14, 2008 12:41 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Socket Micro Responder citando



Anuncios



alpha_soft escribió:
Ahola, alguien podria ayudarme, estoy realizando una aplicacion para obtener los datos de una Pc, y me falta obtener el tipo de socket del microprocesador(478, 775, 370, etc)

gracias!


No es fácil pero es posible, para obtener el tipo de socket tienes que obtenerlo de la información de la BIOS. Y para obtener la información de la BIOS puedes utilizar WMI (Windows Management Instrumentation).

Te mostramos un ejemplo de cómo obtener el número de serie de la BIOS, el fabricante y la versión:

Código:

unit UnidadMenuPrincipal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActiveX, WbemScripting_TLB;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    txtInfo: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


function obtenerDatosBIOS : string;
const
  sQuery = 'select SerialNumber from Win32_BIOS';
var
  Item : SWbemObject;
  NumProp : LongWord;
  ObjectSet : ISWbemObjectSet;
  OleProperty : OleVariant;
begin
  ObjectSet := CoSWbemLocator.Create.ConnectServer('',
      'root\cimv2', '', '', '', '', 0, nil ).ExecQuery(sQuery,
      'WQL', wbemFlagBidirectional, nil );
  if Succeeded((ObjectSet._NewEnum as IEnumVariant).Next(1,
      OleProperty, NumProp)) and (NumProp > 0)  and
      Succeeded(IDispatch(OleProperty).QueryInterface(
      SWBemObject, Item)) then
  begin
    Result := Item.GetObjectText_(0);
  end
  else
  begin
    Result := '<Desconocido>';
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  txtInfo.Text := obtenerDatosBIOS;
end;

end.


Para que te funcione, antes de compilar, accede al menú "Project" - "Import Type Library", pulsas en "Add" y buscas en la carpeta del sistema (C:\Windows\system32) una carpeta llamada "wbem" y ahí buscas un fichero llamado "wbemdisp.tlb", lo seleccionas. A continuación pulsas en "Create Unit", de esta forma Delphi creará la unidad "WbemScripting_TLB.pas" necesaria para este truco.

Un ejemplo de salida de este truco:


instance of Win32_BIOS
{
Name = "Award Modular BIOS v6.0";
SerialNumber = "SYS-1234567890";
SoftwareElementID = "Award Modular BIOS v6.0";
SoftwareElementState = 3;
TargetOperatingSystem = 0;
Version = "ASUS - 42302e31";
};
MensajePublicado:
Dom Mar 16, 2008 11:35 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Investigando un poco más el WMI Responder citando

Tras investigar un poco más WMI (Windows Management Instrumental), te mostramos el código fuente en Delphi para obtener el socket del procesador:

Código:

function ObtenerSocket : string;
var
  Locator:  ISWbemLocator;
  Services: ISWbemServices;
  SObject:  ISWbemObject;
  ObjSet:   ISWbemObjectSet;
  SProp:    ISWbemProperty;
  Enum:     IEnumVariant;
  Value:    Cardinal;
  TempObj:  OleVariant;
  SN: string;
begin
  try
  Locator := CoSWbemLocator.Create;
  //conectamos con el servicio WMI con root\cimv2
  Services :=  Locator.ConnectServer('',
      'root\cimv2', '', '', '','', 0, nil);
  ObjSet := Services.ExecQuery('SELECT * FROM Win32_Processor', 'WQL',
      wbemFlagReturnImmediately and wbemFlagForwardOnly , nil);
  Enum := (ObjSet._NewEnum) as IEnumVariant;
  while (Enum.Next(1, TempObj, Value) = S_OK) do
  begin
    SObject := IUnknown(tempObj) as ISWBemObject;
    SProp := SObject.Properties_.Item('SocketDesignation', 0);
    if VarIsNull(SProp.Get_Value) then
      result := ''
    else
    begin
      SN := SProp.Get_Value;
      result :=  SN;
    end;
  end;
  except
   on exception do
    result := '';
   end;
end;


Ejemplo de uso:
Código:

procedure TformMenuPrincipal.Button1Click(Sender: TObject);
begin
ShowMessage (ObtenerSocket);
end;
MensajePublicado:
Lun Mar 17, 2008 1:18 am
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A