找回密码
 加入
搜索
查看: 17404|回复: 24

[系统综合] 如何得到第一硬盘的最后分区?

  [复制链接]
发表于 2009-10-24 23:41:09 | 显示全部楼层 |阅读模式
悬赏200金钱已解决
比如第一硬盘有4个分区,最后一个分区盘符为F:,如何得到“F:”呢?
第2硬盘的最后分区呢,第3呢,·······,第n呢?

最佳答案

查看完整内容

如果仅仅是隐藏了盘符而显不出来,在地址栏输入盘符还能打开的那种隐藏,是可以识别的; 但是直接删除了盘符的那种隐藏(比如利用磁盘管理器删除某个分区的盘符),就没办法通过盘符的字母来识别了,因为根本就没有那个盘符的字母(C:D:E:……)怎么来识别。。。。。

评分

参与人数 1金钱 +20 收起 理由
afan + 20 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2009-10-24 23:41:10 | 显示全部楼层
本帖最后由 sanmoking 于 2009-10-25 02:04 编辑
$fini = @TempDir&"\d.ini" 
_test() 
_last() 
FileDelete($fini)

Func _test() 
$strComputer = "localhost"
$objWMIService = ObjGet("winmgmts:\" & $strComputer & "\root\CIMV2") 
$colDiskDrives = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive")
For $objDrive In $colDiskDrives
        $strDeviceID = StringReplace($objDrive.DeviceID, "", "\")
    $colPartitions = $objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & $strDeviceID & """} WHERE AssocClass = Win32_DiskDriveToDiskPartition") 
IniWrite ($fini, "磁盘","磁盘列表",IniRead($fini, "磁盘","磁盘列表","")&StringRight ($strDeviceID,1))         
IniWrite ($fini, "磁盘","HD"&StringRight ($strDeviceID,1),$objDrive.Caption)        
    For $objPartition In $colPartitions
       $colLogicalDisks = $objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & $objPartition.DeviceID & """} WHERE AssocClass = Win32_LogicalDiskToPartition") 
        For $objLogicalDisk In $colLogicalDisks                        
                IniWrite ($fini, "磁盘",$objDrive.Caption,IniRead($fini, "磁盘",$objDrive.Caption,"")&StringReplace($objLogicalDisk.DeviceID, ":", "")) 
        Next 
                Next
Next
EndFunc
Func _last()        
$dd = IniRead($fini,"磁盘","磁盘列表","")
$yingpanshu = StringLen($dd) ;磁盘数目
$ttt=""
for $i = 1 to $yingpanshu
        $yingpanxuhao = "HD"&StringMid($dd,$i,1);磁盘序号
        $yingpanname=IniRead($fini,"磁盘",$yingpanxuhao,"")         ;磁盘名称
        $yingpanfenqu=IniRead($fini,"磁盘",$yingpanname,"")         ;磁盘
        $fenqushumu=StringLen($yingpanfenqu);分区数目
        $lastfenqu=StringRight ($yingpanfenqu,1);最后一个分区
        $ttt=$ttt&"磁盘【"&$yingpanxuhao&":"&$yingpanname&"】上有【"&$yingpanfenqu&"】共"&$fenqushumu&"个分区,最后一个分区是【"&$lastfenqu&"】。"&@CRLF
Next
MsgBox(0,"一共发现"&$yingpanshu&"块磁盘","一共发现"&$yingpanshu&"块磁盘,其中:"&@CRLF&$ttt)
EndFunc
隐藏分区算吗?
pusofalse 发表于 2009-10-25 01:30




如果仅仅是隐藏了盘符而显不出来,在地址栏输入盘符还能打开的那种隐藏,是可以识别的;

但是直接删除了盘符的那种隐藏(比如利用磁盘管理器删除某个分区的盘符),就没办法通过盘符的字母来识别了,因为根本就没有那个盘符的字母(C:D:E:……)怎么来识别。。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1威望 +5 金钱 +100 贡献 +90 收起 理由
kn007 + 5 + 100 + 90 非常厉害,谢谢了,学习了,十分感谢!

查看全部评分

发表于 2009-10-25 01:30:10 | 显示全部楼层
隐藏分区算吗?

评分

参与人数 1金钱 +10 收起 理由
kn007 + 10 大大,有其他法子吗?

查看全部评分

发表于 2009-10-25 13:50:10 | 显示全部楼层
pusofalse,有办法将笔记本的隐藏分区找出来不?
发表于 2009-10-25 20:38:07 | 显示全部楼层
楼主所说的“最后”是以什么为参照的呢?按照字母顺序,还是分区时的顺序?在分区时,可能先分了F,再分了E,这种情况下,F是最后分区,还是E是最后分区?
Re 2#:
不一定要用字母标示每个分区。存储卷的设备ID或卷名称也是唯一的,也可以用来标示一个分区。

Re 4#:
引导记录里记录着分区状况,读分区表应该能判断出来,不过没有测试~

评分

参与人数 1金钱 +10 收起 理由
kn007 + 10 有点明白您的意思http://www.autoit.net.cn ...

查看全部评分

 楼主| 发表于 2009-10-26 08:56:50 | 显示全部楼层
没试过有先F后E。。。。。不知要怎么分出来。。。。码字时突然明白你的意思了。。。我也会。。。。这时F是最后分区,以我习惯来说,按实际的话就是E是最后。。。。不过如果出现这种情况,能不能以F来作为最后分区识别出来?要是想识别为E要怎么办呢?

我也有这种情况,不过已经很多年了,当时是一个15G硬盘,那时已经很大了。。。就是先有后面分区,再有前面分区(后面前面指的是字母)

其实,我就是想判断下第一硬盘的最后个分区,然后copy个ghost。。。。。。。


隐藏分区我好像用不着,如果大大能写出来,让大家学习学习,那是最好。。。。
隐藏分区一般我都是直接把他开刀格掉,,,浪费空间,只要你保护的好,其实不用隐藏分区。。。
发表于 2009-10-26 10:05:37 | 显示全部楼层
$ver = DriveGetDrive("FIXED")
$i=$ver[0]
MsgBox(0, "硬盘检测", "您的最后一个盘是"&StringUpper ($ver[$i]) )

这是别人的方法,不知道你有没有试过

评分

参与人数 1金钱 +10 收起 理由
kn007 + 10 这是所有硬盘的最后分区,比如我这里最后一 ...

查看全部评分

 楼主| 发表于 2009-10-26 10:54:17 | 显示全部楼层
等等看还有没有其他解决法子,如果没有,就评选sanmoking 为最佳答案
发表于 2009-10-26 17:35:38 | 显示全部楼层
本帖最后由 sanmoking 于 2009-10-26 17:58 编辑

深度技术 小兵作品的ghost安装工具是按
hd0,1
hd0,2
hd0,3
hd1,1
hd1,2
……
这样来表示分区的,汗,专业的名词我也说不出来。。。。当给楼主提示一下好了。。。。wmi我也不会,不知道该怎么去取这个值。。。。。我理解的意思就是他是按实际的分区来排号的,而不是按分区字母来的(所以说 ghost似乎只需要知道每个硬盘有几个分区就好了,比如第一硬盘有4个分区,那就用【hd0,4】表示就行了,不用知道分区的字母。。。不知道我的理解对不?)。。。。ghost里面显示ntfs分区也是这样排序的。。。
 楼主| 发表于 2009-10-26 17:43:43 | 显示全部楼层
。。。不知有哪位高手知道,能给出来让大家学习学习
发表于 2009-10-26 18:59:41 | 显示全部楼层
获取物理磁盘信息
#include <SetupApi.au3>
$aPhysDisks = _CM_Enumerate_Physical_Disks()
_Arraydisplay($aPhysDisks)
检测隐藏分区
#include <SetupApi.au3>

Local $aList, $sDevicePath, $sDrive
Local $sVolume, $iDiskNum, $aHidden[1][3]

$aList = _CM_Get_Device_Interface_List_Ex(0, $GUID_DEVINTERFACE_VOLUME)
For $i = 1 To $aList[0]
        $sVolume = _CM_Get_Volume_Name($aList[$i] & "")
        $sDrive = _CM_Get_Volume_Path($sVolume)
        If $sDrive = "" Then
                $sDevicePath = StringTrimLeft($aList[$i], 4)
                $iDiskNum = _CM_Get_Drive_Disk_Number($sDevicePath)
                If $iDiskNum < 0 Then ContinueLoop
                $aHidden[0][0] += 1
                Redim $aHidden[$aHidden[0][0] + 1][3]
                $aHidden[$aHidden[0][0]][0] = "\\.\PhysicalDrive" & $iDiskNum
                $aHidden[$aHidden[0][0]][1] = $sVolume
                $aHidden[$aHidden[0][0]][2] = $aList[$i]
        EndIf
Next
_Arraydisplay($aHidden)

评分

参与人数 1威望 +5 金钱 +100 贡献 +90 收起 理由
kn007 + 5 + 100 + 90 待会看看

查看全部评分

 楼主| 发表于 2009-10-26 22:05:20 | 显示全部楼层
发表于 2009-10-28 22:31:24 | 显示全部楼层
winapiex里好像有这个函数,印象不是很深
 楼主| 发表于 2009-10-28 22:46:59 | 显示全部楼层
#include <WinAPIEx.au3>
的哪个啊?

这好像还没汉化呢
 楼主| 发表于 2009-10-28 22:49:51 | 显示全部楼层
这函数也挺强大的,不过好像要新版才有。。。。郁闷

我是 Autoit 3.2.13.12 第一汉化版
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-10 17:14 , Processed in 0.105392 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表