Вверх ↑
Ответов: 57
Рейтинг: 0
#1: 2016-09-05 17:07:07 ЛС | профиль | цитата
без таймера ноль выдаёт а с таймером 255 , вот ещё вариант с делфи форума :

procedure GetTemperature(var Airflow, HDA, Temperature: Integer);
var
  objLocator: ISWbemLocator;
  objServices: ISWbemServices;
  objObjectSet: ISWbemObjectSet;
  EnumSet: IEnumVariant;
  SetVar: OleVariant;
  Fetched: Cardinal;
  objObject: ISWbemObject;
  objProperty: ISWbemProperty;
  v: OleVariant;
  i: Integer;
begin
  Airflow:=-1;
  HDA:=-1;
  Temperature:=-1;
  objLocator:=CreateComObject(CLASS_SWbemLocator) as ISWbemLocator;
  objServices:=objLocator.ConnectServer('', 'root\WMI', '', '', '', '', 0, nil);
  objObjectSet:=objServices.ExecQuery('select * from MSStorageDriver_ATAPISmartData', 'WQL', 0, nil);
  EnumSet:=IUnknown(objObjectSet._NewEnum) as IEnumVariant;
  while EnumSet.Next(1, SetVar, Fetched)=S_OK do
  begin
    objObject:=IUnknown(SetVar) as ISWbemObject;
    objProperty:=objObject.Properties_.Item('VendorSpecific', 0);
    if (objProperty.CIMType=wbemCimtypeUint8) and objProperty.IsArray then
    begin
      v:=objProperty.Get_Value;
      for i:=0 to ((VarArrayHighBound(v, 1)-1) div 12)-1 do
      begin
        if v[2+i*12]=190 then Airflow:=v[2+i*12+3];
        if v[2+i*12]=194 then HDA:=v[2+i*12+3];
        if v[2+i*12]=231 then Temperature:=v[2+i*12+3];
      end;
    end;
  end;
end;
только нужно исправить код для нескольких жестких дисков, иначе будет выдавать для последнего.
карма: 0

0