2011-11-10 14 views
11

क्या एसएमएआरआर एपीआई या उसके जैसा कुछ भी हैरडीस्क तापमान देखना संभव है?हार्डडिस्क तापमान कैसे पढ़ा जाए?

मैं सिर्फ अस्थायी चाहते हैं, सी # में और कुछ नहीं

+0

साथ उत्पन्न और जहां समस्या है? – Burimi

+1

कोई समस्या नहीं है .. मुझे बस एक स्मार्ट एपीआई खोजने की जरूरत है - Ive google'd लेकिन कोई भी नहीं मिला .. – Mathias

उत्तर

6

यहाँ इस article से कोड स्निपेट आशा है कि यह मदद करता है

//S.M.A.R.T. Temperature attritube 

const byte TEMPERATURE_ATTRIBUTE = 194; 
public List GetDriveTemp() 
{ 
    List retval = new List(); 
    try 
    { 
     ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSStorageDriver_ATAPISmartData"); 
       //loop through all the hard disks 
     foreach (ManagementObject queryObj in searcher.Get()) 
     { 
      byte[] arrVendorSpecific = (byte[])queryObj.GetPropertyValue("VendorSpecific"); 
      //Find the temperature attribute 
         int tempIndex = Array.IndexOf(arrVendorSpecific, TEMPERATURE_ATTRIBUTE); 
      retval.Add(arrVendorSpecific[tempIndex + 5]); 
     } 
    } 
    catch (ManagementException err) 
    { 
     Console.WriteLine("An error occurred while querying for WMI data: " + err.Message); 
    } 
    return retval; 
} 
+0

यह tempIndex + 5 क्यों है, और मैंने इसके बारे में पहले से ही एक प्रश्न पोस्ट किया है लेकिन करें आप जानते हैं कि विशेषता 1 9 3 (लोड/अनलोड चक्र गणना) से डेटा कैसे प्राप्त करें –

+0

'सूची' को 'सूची ' में बदलने के बाद ठीक है, और 'System.Management'' के संदर्भ को शामिल करें। स्थानीय ड्राइव के लिए सेल्सियस लौटाता है, 0 एसएसडी के लिए। – TaW

1

VMI और MSStorageDriver_ATAPISmartData का उपयोग VendorSpecific बाइट सरणी और 115 बाइट संख्या है प्राप्त करने के लिए है तापमान। 115 क्यों? अधिक here

कोड आंशिक रूप से VMI Code Creator

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", 
"SELECT * FROM MSStorageDriver_ATAPISmartData"); 

foreach (ManagementObject queryObj in searcher.Get()) 
{ 
    if (queryObj["VendorSpecific"] != null) 
    { 
     byte[] arrVendorSpecific = (byte[])(queryObj["VendorSpecific"]); 
     string temp = arrVendorSpecific[115].ToString(); 
    } 
} 
संबंधित मुद्दे