hola ! me gustaria saber como se puede obtener los datos de temperaturas da mi pc y la del micro , si es posible ? no se por donde empezar ! muchas gracias !!
Publicado:
Mie Ene 14, 2009 11:25 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: como leer mi hardware ?
Anuncios
gaston260 escribió:
hola ! me gustaria saber como se puede obtener los datos de temperaturas da mi pc y la del micro , si es posible ? no se por donde empezar ! muchas gracias !!
Puedes probar esto, como primera aproximación, se trata de intentar obtenerla mediante WMI:
type
TForm1 = class(TForm)
Memo1: TMemo;
bObtenerTemperatura: TButton;
procedure bObtenerTemperaturaClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 : TForm1;
function obtenerObjeto(Value: String) : IUnknown;
procedure mostrarTemperatura (var temperatura : string);
implementation
{$R *.dfm}
procedure mostrarTemperatura (var temperatura : string);
var
ovObjSet : OleVariant;
ovObj : OleVariant;
ovEnum : OleVariant;
pvEnum : IEnumVariant;
dwFetch : Cardinal;
begin
ovObjSet := obtenerObjeto('winmgmts:{impersonationLevel=impersonate}') as IDispatch;
ovObjSet := ovObjSet.InstancesOf('Win32_TemperatureProbe');
ovEnum := ovObjSet._NewEnum;
pvEnum := IEnumVariant(TVarData(ovEnum).VUnknown);
pvEnum.Reset;
temperatura := '';
while (pvEnum.Next(1, ovObj, dwFetch) = S_OK) do
begin
temperatura := ovObj.CurrentReading;
ovObj := Unassigned;
end;
pvEnum := nil;
ovEnum := Unassigned;
ovObjSet := Unassigned;
end;
function obtenerObjeto (Value : String) : IUnknown;
var
pmk : IMoniker;
pbc : IBindCtx;
cbEaten : LongInt;
clsid : TGUID;
begin
if (CLSIDFromProgID(PWideChar(WideString(Value)), clsid) = S_OK) then
begin
if not(GetActiveObject(clsid, nil, result) = S_OK) then
result := nil;
end
else
begin
if (CreateBindCtx(0, pbc) = S_OK) then
begin
if (MkParseDisplayName(pbc, StringToOleStr(Value), cbEaten, pmk) = S_OK) then
begin
if not(BindMoniker(pmk, 0, IUnknown, result) = S_OK) then
result := nil;
pmk := nil;
end;
pbc := nil;
end;
end;
end;
procedure TForm1.bObtenerTemperaturaClick(Sender: TObject);
var
temperatura : string;
begin
mostrarTemperatura(temperatura);
Memo1.Lines.Clear;
Memo1.Lines.Add('Temperatura: ' + temperatura);
end;
end.
Aunque hemos comprobado que en algunos equipos no la obtiene. Este dato a veces no es fácil obtenerlo pues depende de muchos factores:
* La placa base ha de soportarlo, algunas no tienen control de temperatura, sobre todo las antiguas.
* Cada BIOS es diferente, con lo cual, si realizas un software que obtenga la temperatura para una placa base que utilice una BIOS Award puede que no te funcione para una placa base que utilice una BIOS Phoenix.
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