找回密码
 加入
搜索
查看: 6127|回复: 17

如何获取硬盘列表?

  [复制链接]
发表于 2008-5-18 21:52:36 | 显示全部楼层 |阅读模式
想在下拉列表中进行选择硬盘的操作,应该怎样获取主机中的物理磁盘(不是分区)列表呢?
发表于 2008-5-18 22:01:35 | 显示全部楼层
wmi吧……真麻烦,怎么要这样做呢?
发表于 2008-5-19 00:11:07 | 显示全部楼层
楼主不妨看下这个:
Local $var = DriveGetDrive("all")
Local $Drives = ""
If Not @error Then
    Local $Var = _GetDiskType()
    For $J = 1 To $Var[0]
        $Drives = $Drives & ($Ver[$J] & @CRLF)
    Next
EndIf

Func _GetDiskType()
        Local $Disk = "HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum\"
        Local $Enum = "HKLM\SYSTEM\CurrentControlSet\Enum\"
        Local $Count = RegRead("HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum\", "Count")
        Dim $Return[$Count + 1]
        $Return[0] = $Count
        For $J = 1 To $Count
                $Return[$J] = RegRead($Enum & RegRead($Disk, $J - 1), "FriendlyName")
        Next
        Return $Return
EndFunc   ;==>_GetDiskType
 楼主| 发表于 2008-5-19 12:39:15 | 显示全部楼层
运行报错:
C:\Documents and Settings\Administrator\桌面\getdisk.au3(6,39) : WARNING: $Ver: possibly used before declaration.
        $Drives = $Drives & ($Ver[$J] &
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Documents and Settings\Administrator\桌面\getdisk.au3(6,39) : ERROR: $Ver: undeclared global variable.
        $Drives = $Drives & ($Ver[$J] &
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Documents and Settings\Administrator\桌面\getdisk.au3 - 1 error(s), 1 warning(s)
发表于 2008-5-19 12:46:07 | 显示全部楼层
用WMI获取成功。只是硬盘列表再获取分区列表暂时出问题。
 楼主| 发表于 2008-5-19 20:38:12 | 显示全部楼层
原帖由 sanhen 于 2008-5-19 12:46 发表
用WMI获取成功。只是硬盘列表再获取分区列表暂时出问题。

那用wmi获取要怎么写|基本上我只需要获取硬盘列表,分区没有所谓
发表于 2008-5-21 22:23:37 | 显示全部楼层

;
MsgBox(0,"test",_DiskList())

Func _DiskList()
;功能:返回硬盘列表,以|为分隔
;说明:www.autoitx.com 版权所有
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"

$Output=""

$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", "WQL", _
                                          $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

If IsObj($colItems) then
   For $objItem In $colItems
$Output&=$objItem.Model&"|"
  ;硬盘列表
;$Output&=$objItem.Model&chr(32)&"("&int($objItem.Size/1000/1000/1000)&chr(32)&"GB"&")"&"|"
;硬盘列表加硬盘大小
Next
Return $Output
EndIf

EndFunc

发表于 2008-5-21 23:55:28 | 显示全部楼层
哇,要是能显示到分区及分区下的子文件夹、文件,那功能真...................................
发表于 2008-5-22 14:35:13 | 显示全部楼层
原帖由 木纳 于 2008-5-21 23:55 发表
哇,要是能显示到分区及分区下的子文件夹、文件,那功能真...................................

那真是一个翻版的资源管理器了
发表于 2008-6-1 14:51:13 | 显示全部楼层
干吗不把分区的也顺便也发出来看看呢??
发表于 2009-7-2 13:52:34 | 显示全部楼层
真的很强悍啊,学习了!
发表于 2009-7-2 14:28:08 | 显示全部楼层
运行报错:
C:\Documents and Settings\Administrator\桌面\getdisk.au3(6,39) : WARNING: $Ver: possibly used before declaration.
        $Drives = $Drives & ($Ver[$J] &
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
fatball 发表于 2008-5-19 12:39
Local $var = DriveGetDrive("all")
Local $Drives = ""
If Not @error Then
Local $Var = _GetDiskType()
For $J = 1 To $Var[0]
$Drives = $Drives & ($Var[$J] & @CRLF)
Next
MsgBox(0,'',$Drives) 
EndIf

Func _GetDiskType()
Local $Disk = "HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum"
Local $Enum = "HKLM\SYSTEM\CurrentControlSet\Enum"
Local $Count = RegRead("HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum", "Count")
Dim $Return[$Count + 1]
$Return[0] = $Count
For $J = 1 To $Count
$Return[$J] = RegRead($Enum & RegRead($Disk, $J - 1), "FriendlyName")
Next
Return $Return
EndFunc ;==>_GetDiskType
发表于 2009-7-2 15:03:20 | 显示全部楼层
学习下,特别是楼上的代码
发表于 2009-9-9 23:52:33 | 显示全部楼层
没有硬盘大小的信息。喜欢那个注册表的方法。
发表于 2010-5-27 10:38:41 | 显示全部楼层
能不能获取到分区信息呢。特别是第几硬盘的第几分区
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-3 12:25 , Processed in 0.085617 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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