磁盘分区的状态(已完成)
本帖最后由 qqgghh1 于 2016-2-15 17:04 编辑需求:如上图,解决技术员安装系统后忘记格式化分区的问题。用户是使用USERS权限,领用后无法正常使用电脑。
思路:执行脚本,若发现有未分配的卷,则提示出来。
目前有学习_WinAPI_GetVolumeInformation、_WinAPI_GetDriveGeometryEx等相关,无论Drive还是Volume,都要求指定驱动器号才能返回相关信息。
不得其解,请求帮助,谢谢!
2016/2/15补充:
看API、WMI,眼都看肿了,也没找到直接获取的(估计还是自己功力不够),想用diskpart回显,又说该命令不支持回显。对着计算机磁盘管理界面发呆,若用该硬盘总容量-该硬盘所有分区容量总和,是不是就是没有被分配的呢。
马上来试:
用DriveGetDrive('fixed') 获得所有可见分区
用_WinAPI_GetDriveNumber,将属同一硬盘上的可见分区容量加总
用_WinAPI_GetDriveGeometryEx 获取相应硬盘的总容量
哈哈,菜鸟也有菜鸟的招,先这样吧。#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
Dim $Drive = DriveGetDrive('fixed')
Dim $List,$partition_info,$disk_info
For $i = 0 To UBound($Drive) - 1
$List[$i] = ''
Next
If IsArray($Drive) Then
For $i = 1 To UBound($Drive) - 1
$partition_info = _WinAPI_GetDriveNumber($Drive[$i]);检索指定驱动器的类型、编号、分区号,:对应该分区的硬盘号
If IsArray($partition_info) Then
$List[$partition_info] +=Floor(DriveSpaceTotal($Drive[$i])/1024);同一块硬盘上的分区容量自加
EndIf
Next
EndIf
For $i = 0 To UBound($Drive) - 1
If $List[$i] Then
$disk_info = _WinAPI_GetDriveGeometryEx($i);检索磁盘的几何结构扩展信息,:The disk size
Dim $check_diff = Floor ($disk_info/1024/1024/1024)-$List[$i]
If $check_diff >0 ThenMsgBox(0,0,"磁盘"&$i&"有"&$check_diff&"GB空间未分配")
EndIf
If DriveStatus($Drive[$i]) = "UNKNOWN" ThenMsgBox(0,0,"分区"&$Drive[$i]&"未格式化")
Next 本帖最后由 fuldho 于 2015-12-25 09:28 编辑
任意一款磁盘分区软件分区,无论大小都会留下未分配区域,有些分区软件也无法查看留下未分配区域,
WinHex是可以查看到的,是否有其他工具可以判断就不知道了。
DiskGenius查看
WinHex查看
回复 2# fuldho
多谢fuldho的用心回复,谢谢提点。我再试试看,若找不到API方法,再使用第三方软件返回值了。 学习一下{:face (411):} 回复 3# qqgghh1
使用第三方软件返回值比API方法快捷,比如用第三方软件返回U盘UD区和EFI高端隐藏区大小等。 学习了感谢 分享 学习了感谢 分享
页:
[1]