2009-05-13 7 views
8

मैं एक छोटा ऐप बना रहा हूं जो मुझे मेरे डिस्क पर मुफ्त स्थान प्रदान करता है।कोड के आधार पर, मैं कैसे जांच सकता हूं कि हार्ड डिस्क ड्राइव इसे जागने के बिना सो रही है

मैं डिस्क की स्थिति प्रदर्शित करने वाली सुविधा जोड़ना चाहता हूं, अगर यह सो रहा है या उदाहरण के लिए नहीं। ओएस विंडोज है।

यह कैसे किया जा सकता है?

सी # में एक समाधान अच्छा होगा लेकिन मुझे लगता है कि किसी भी समाधान करना होगा ...

धन्यवाद आप के लिए मदद); कोड डिस्क जगाने के लिए, पता लगाने के लिए निश्चित रूप से नहीं होना चाहिए।

उत्तर

6

सी ++ समाधान (GetDiskPowerState फोन और जब तक वहाँ कोई और अधिक कर रहे हैं यह भौतिक ड्राइव से अधिक पुनरावृति जाएगा):

class AutoHandle 
{ 
    HANDLE mHandle; 
public: 
    AutoHandle() : mHandle(NULL) { } 
    AutoHandle(HANDLE h) : mHandle(h) { } 

    HANDLE * operator &() 
    { 
     return &mHandle; 
    } 

    operator HANDLE() const 
    { 
     return mHandle; 
    } 

    ~AutoHandle() 
    { 
     if (mHandle && mHandle != INVALID_HANDLE_VALUE) 
      ::CloseHandle(mHandle); 
    } 
}; 


bool 
GetDiskPowerState(LPCTSTR disk, string & txt) 
{ 
    AutoHandle hFile = CreateFile(disk, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); 
    if (hFile && hFile != INVALID_HANDLE_VALUE) 
    { 
     BOOL powerState = FALSE; 
     const BOOL result = GetDevicePowerState(hFile, &powerState); 
     const DWORD err = GetLastError(); 

     if (result) 
     { 
      if (powerState) 
      { 
       txt += disk; 
       txt += " : powered up\r\n"; 
      } 
      else 
      { 
       txt += disk; 
       txt += " : sleeping\r\n"; 
      } 
      return true; 
     } 
     else 
     { 
      txt += "Cannot get drive "; 
      txt += disk; 
      txt += "status\r\n"; 
      return false; 
     } 
    } 

    return false; 
} 

string 
GetDiskPowerState() 
{ 
    string text; 
    CString driveName; 
    bool result = true; 
    for (int idx= 0; result; idx++) 
    { 
     driveName.Format("\\\\.\\PhysicalDrive%d", idx); 
     result = GetDiskPowerState(driveName, text); 
    } 
    return text; 
} 
+0

धन्यवाद, एक आकर्षण की तरह काम करता है। – Jonx

3

और सी # में (http://msdn.microsoft.com/en-us/library/ms704147.aspx से)

// Get the power state of a harddisk 
string ReportDiskStatus() 
{ 
    string status = string.Empty; 
    bool fOn = false; 

    Assembly assembly = Assembly.GetExecutingAssembly(); 
    FileStream[] files = assembly.GetFiles(); 
    if (files.Length > 0) 
    { 
     IntPtr hFile = files[0].Handle; 
     bool result = GetDevicePowerState(hFile, out fOn); 
     if (result) 
     { 
      if (fOn) 
      { 
       status = "Disk is powered up and spinning"; 
      } 
      else 
      { 
       status = "Disk is sleeping"; 
      } 
     } 
     else 
     { 
      status = "Cannot get Disk Status"; 
     } 
     Console.WriteLine(status); 
    } 
    return status; 
} 
+0

हाँ, अच्छा ... आप आयात खो रहे हैं लेकिन लिंक यह सब देता है। धन्यवाद। – Jonx

संबंधित मुद्दे