小编Not*_*ted的帖子

如何检测硬盘驱动器是否正在旋转(在Windows下)?

如何以编程方式确定硬盘驱动器当前是否正在旋转(Windows 7或更高版本)?

我试过GetDevicePowerState()但它总是返回TRUE(总是1,而不是另一个非零值)我知道当前没有旋转的驱动器(内部和USB驱动器).GetDevicePowerState()返回后TRUE,如果我dir d:在控制台中发出,我会听到驱动器旋转,并且在生成目录列表之前有几秒钟的延迟.

我的代码需要检查驱动器上的目录是否存在.如果驱动器当前停止运转,则可以延迟或跳过检查.我想避免在旋转驱动器上进行检查有两个原因:1)检查当前是同步完成的,我不希望用户必须等待驱动器旋转2)我不想导致驱动器旋转只是为了进行检查(希望很明显为什么不这样做).

有没有办法做到这一点?

根据评论更新:

有人建议GetDevicePowerState使用物理设备名称但我不能让它返回除1以外的任何东西(同样,对于我已经验证的驱动器不旋转).以下是我正在使用的代码.如果GetDevicePowerState确实知道使用USB驱动器,我的论据可能有问题CreateFile吗?

for (int DriveNumber = 0; DriveNumber < 128; ++DriveNumber) {
   TCHAR Drive[128];
   _stprintf (Drive, _T("\\\\.\\PHYSICALDRIVE%d"), DriveNumber);
   HANDLE hDevice = CreateFile(Drive, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
   if (hDevice != INVALID_HANDLE_VALUE) {
      BOOL DeviceIsOn = FALSE;
      if (GetDevicePowerState(hDevice, &DeviceIsOn) != 0) {
         _tprintf(_T("Physical Drive %d is Powered %s (DeviceIsOn=%d)\n"), DriveNumber, DeviceIsOn?_T("On"):_T("Off"), (int)DeviceIsOn);
      }
      CloseHandle(hDevice);
   }
}
Run Code Online (Sandbox Code Playgroud)

windows winapi hard-drive

9
推荐指数
1
解决办法
2296
查看次数

标签 统计

hard-drive ×1

winapi ×1

windows ×1