unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls,
smart_drv, magsubs1, magwmi;
// http://www.magsys.co.uk/download/software/magwmi53.zip
type
TForm1 =
class(TForm)
Timer1: TTimer;
Memo1: TMemo;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
function GetDriveTemp(drive:longint):byte;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function HexToStr(w : Int64) :
string;
const
ByteToChar :
array[0..$F]
of char ='
0123456789ABCDEF';
var
s :
string;
i : integer;
x : int64;
begin
s := '
';
x := w;
for i := 0
to 3
do
begin
s := ByteToChar[Byte(x)
shr 4] + ByteToChar[Byte(x)
and $F] + s;
x := x
shr 8;
end;
HexToStr := s;
end;
function TForm1.GetDriveTemp(drive:Integer):byte;
var i, B2 : Integer;
begin
result:=0; Memo1.clear;
ReadSMART;
for i:=0
to 255
do
begin
// ATTR_READ_ERROR_RATE = 1;
if SCOP[0].attr[i].bAttrID=1
then
begin
result:=SCOP[0].attr[i].Raw[0];
Memo1.lines.add('
ATTR_READ_ERROR_RATE: '+HexToStr(result));
end;
//ATTR_POWER_ON_HRS_COUNT = 9;
if SCOP[0].attr[i].bAttrID=9
then
begin
B2:= SCOP[0].attr[i].Raw[0]+(SCOP[0].attr[i].Raw[1]*256);
Memo1.lines.add('
ATTR_POWER_ON_HRS_COUNT in hours: '+IntToStr(B2));
end;
//ATTR_TEMPERATURE_CELCIUS = 194 ;
if SCOP[0].attr[i].bAttrID=194
then
begin
result:=SCOP[0].attr[i].Raw[0];
Memo1.lines.add('
ATTR_TEMPERATURE_CELCIUS: '+IntToStr(result));
break;
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
Begin
GetDriveTemp(0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
GetDriveTemp(0);
end;
end.
(*
Const
ATTR_INVALID = 0;
ATTR_READ_ERROR_RATE = 1;
ATTR_THROUGHPUT_PERF = 2;
ATTR_SPIN_UP_TIME = 3;
ATTR_START_STOP_COUNT = 4;
ATTR_REALLOC_SECTOR_COUNT = 5;
ATTR_READ_CHANNEL_MARGIN = 6;
ATTR_SEEK_ERROR_RATE = 7;
ATTR_SEEK_TIME_PERF = 8;
ATTR_POWER_ON_HRS_COUNT = 9;
ATTR_SPIN_RETRY_COUNT = 10;
ATTR_CALIBRATION_RETRY_COUNT = 11;
ATTR_POWER_CYCLE_COUNT = 12;
ATTR_EMERGENCY_RETRACT_CYCLE = 192 ; // C0
ATTR_LOAD_CYCLE_COUNT = 193 ; // C1
ATTR_TEMPERATURE_CELCIUS = 194 ; // C2
ATTR_HARDWARE_ECC = 195 ; // C3
ATTR_REALLOCATION_EVENT_COUNT = 196 ; // C4
ATTR_CURRENT_PENDING_SECTOR = 197 ; // C5
ATTR_OFF_LINE_UNCORRECTABLE = 198 ; // C6
ATTR_ULTRA_ATA_CRC_ERROR_RATE = 199 ; // C7
ATTR_MULTI_ZONE_ERROR_RATE = 200 ; // C8
ATTR_SOFT_READ_ERROR_RATE = 201 ; // C9
ATTR_OFF_TRACK_ERRORS = 201 ; // C9 - alternative Maxtor
ATTR_TA_INCREASE_COUNT = 202 ; // CA
ATTR_RUN_OUT_CANCEL = 203 ; // CB
ATTR_ECC_ERRORS = 203 ; // CB - alternative Maxtor
ATTR_SHOCK_COUNT_WRITE_OPS = 204 ; // CC
ATTR_SHOCK_RATE_WRITE_OPS = 205 ; // CD
ATTR_SPIN_HIGH_CURRENT = 207 ; // CE
ATTR_SPIN_BUZZ = 208 ; // CF
ATTR_OFFLINE_SEEK_PERF = 209 ; // D0
*)