Jon*_*onx 9 c# windows hardware
我正在构建一个小应用程序,它为我提供了磁盘上的可用空间.
我想添加一个显示磁盘状态的功能,例如,如果它处于休眠状态.操作系统是Windows.
如何才能做到这一点?当然,代码不应该唤醒磁盘找出来;)
C#中的解决方案会很好,但我猜任何解决方案都会...
谢谢你的帮助.
C++解决方案(调用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;
}
Run Code Online (Sandbox Code Playgroud)