![]() |
SMART-Werte lesen
Hallo,
ich bastele mir gerade eine Komponente, die mir die SMART-Festplatteninfos liefern soll. Ich habe dazu den Code von SwissDelphiCenter.ch verwendet, aber der liefert entweder keine oder nur falsche Werte (Vergleich: SpeedFan). Hier im Forum habe ich nur 2 Themen gefunden, eines davon mit Hinweis zu SwissDelphiCenter. Gibt es vielleicht noch eine andere Möglichkeit, die Werte auszulesen? Danke, ManuMF |
Re: SMART-Werte lesen
Probier mal, diese C-Demo nach Delphi zu portieren.
![]() Ich habe es ![]() |
Re: SMART-Werte lesen
Hallo,
wenn ich C könnte und ein bisschen mehr Zeit hätte... :cyclops: Gruß, ManuMF |
Re: SMART-Werte lesen
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich hatte ein wenig Zeit und interessiert hatte es mich auch. Hier nun die Übersetzung der SmartApp von Microsoft. Ich habe das ganze von einem Kommandozeilentool in eine Form-basierende Form gebracht.
Ich habe einmal IfThen() benutzt, daher ab Delphi 7. Wenn man das IfThen() ersetzt, dann sollte es ab Delphi 4 klappen (die Unit Variants einfach kicken). |
Re: SMART-Werte lesen
:shock:
*räusper* Tja, funktioniert einwandfrei. Die Gelegenheit für mich, mal nachzusehen, warum mein Programm bei mir nur Mist produziert hat. Aus Fehlern lernt man ja bekanntlich... |
Re: SMART-Werte lesen
Hallo,
das funktioniert super :thumb: Auch unter D6. Aber wie kann ich die Werte verwerten? ;-) Mich interessiert vor allem die Temperatur, und der gelesene Wert ist "157", sowohl von dem Programm als auch von SpeedFan. Aber SpeedFan wandelt das um in "27°C". Was steckt dahinter? Fahrenheit nicht, denn die wären weniger. Gruß, ManuMF |
Re: SMART-Werte lesen
Zitat:
//Edit: Ok, ich sehe gerade, bei mir arbeitet Speedfan mit dem "RAW" - Wert dieser Eigenschaft... D.h., dieser müsste auch noch abgefragt werden... |
Re: SMART-Werte lesen
So, ich schon wieder. Wenn du in Zeile 352 der Smartfunc.pas das hier:
Delphi-Quellcode:
in das änderst
AOut.Add(Format('%.2X %-29s%d%20s%d', [lDA^.bAttrID,
coAttrNames[lAttr], lDA^.bAttrValue, ' ', lAT^.bWarrantyThreshold]));
Delphi-Quellcode:
bekommst du den ersten "RAW" - Wert. Bei mir entspricht dieser Wert in der Eigenschaft "C2" der Temperatur der Festplatte. Allerdings weiß ich nicht, ob das genormt ist, sprich, ob alle Hersteller denselben Wert nutzen...
AOut.Add(Format('%.2X %-29s%d%20s%d%20s%d', [lDA^.bAttrID,
coAttrNames[lAttr], lDA^.bAttrValue, ' ', lAT^.bWarrantyThreshold, ' ', lDA^.bRAWValue[0]])); |
Re: SMART-Werte lesen
Moin!
So, schön zu hören, das das Prog klappt. Es ist nur schnell dahingeschmiert - das Memo hat keine Anchors, etc. Sollte alles noch gemacht werden. Nun zu der Frage mit der Temperatur: Ich habe mir mal alle ATA/ATAPI Standards von 1 bis zur 8 (Draft) besorgt und studiert sowie die S.M.A.R.T. Definition der SFF. Bei allen steht halt, dass es Vendor-Specific ist. Die von Microsoft schon mit Text versehenen Attribute sind nur bis ATA-3 richtig, ab ATA-4 sind diese komplett Vendor Specific. Daher müsste man eigentlich aus der vom DEVICE_INQUIRE zurück gelieferten Info-Struktur auslesen nach welcher Revision das Gerät arbeitet und entsprechend umsetzen. Maxtor hat bei vielen Platten eine Attribute ID von 192 (dezimal) für die Temperatur in °C, aber leider nicht überall. Es gibt auch Maxtor Platten mit einem anderen Wert auf dem Attribute ID von 192. Toshiba hat dort meist die Minuten der aktuellen Laufzeit und bei manchen Platten auch die Temperatur - aber mit 10 Multipliziert um eine Kommastelle zu ermöglichen. Ich habe dann mich nochmal mit dem Quellcode von dem SMARTmontools ( ![]() Dann habe ich mich noch auf Suche nach herstellerspezifischen Dokumentationen begeben zu den SMART Attributen, aber Maxtor, Seagate (sind ja nun eins), IBM (Naja, nun Hitachi) und WDC schweigen sich aus oder wollen deftig Geld für die PDFs. Nun aber noch was am Rande: Ich versuche den ATAPI_INQUIRE an meine ATAPI Laufwerke zu senden, aber ich bekomme diese grundlegend nicht erreicht. Wenn ich PhysicalDriveX abändere bekomme ich nie die beiden Laufwerke (obwohl sie am Secondary hängen) und der Laufwerksbuchstabe ist auch nicht erfolgreich (\\.\e:). Ich weiss nicht mehr weiter. Die Kombinationen der Attribute (z.B. entfernen von GENERIC_WRITE) hat auch nicht gebraucht. Irgendwelche Ideen? MfG Muetze1 |
Re: SMART-Werte lesen
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz