qqgghh1 发表于 2015-12-24 16:20:27

磁盘分区的状态(已完成)

本帖最后由 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:23:43

本帖最后由 fuldho 于 2015-12-25 09:28 编辑

任意一款磁盘分区软件分区,无论大小都会留下未分配区域,有些分区软件也无法查看留下未分配区域,
WinHex是可以查看到的,是否有其他工具可以判断就不知道了。

DiskGenius查看


WinHex查看

qqgghh1 发表于 2015-12-25 10:25:51

回复 2# fuldho


    多谢fuldho的用心回复,谢谢提点。我再试试看,若找不到API方法,再使用第三方软件返回值了。

kadingxiaodi 发表于 2015-12-29 09:19:38

学习一下{:face (411):}

fuldho 发表于 2015-12-30 08:22:18

回复 3# qqgghh1

使用第三方软件返回值比API方法快捷,比如用第三方软件返回U盘UD区和EFI高端隐藏区大小等。

车技一流 发表于 2015-12-31 18:32:24

学习了感谢 分享

ddrs 发表于 2016-1-2 01:24:14

学习了感谢 分享
页: [1]
查看完整版本: 磁盘分区的状态(已完成)