gpt4 book ai didi

c# - 通过代码,我如何测试硬盘驱动器是否正在 sleep 而不唤醒它

转载 作者:可可西里 更新时间:2023-11-01 12:43:20 25 4
gpt4 key购买 nike

我正在构建一个小应用程序,为我提供磁盘上的可用空间。

我想添加一个显示磁盘状态的功能,例如它是否正在休眠。操作系统是 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;
}

关于c# - 通过代码,我如何测试硬盘驱动器是否正在 sleep 而不唤醒它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/858706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com