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!
Publicado:
Vie Mar 14, 2008 12:41 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Socket Micro
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:
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.
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;
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