fatball 发表于 2008-5-18 21:52:36

如何获取硬盘列表?

想在下拉列表中进行选择硬盘的操作,应该怎样获取主机中的物理磁盘(不是分区)列表呢?

asdf 发表于 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
      $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 = $Count
        For $J = 1 To $Count
                $Return[$J] = RegRead($Enum & RegRead($Disk, $J - 1), "FriendlyName")
        Next
        Return $Return
EndFunc   ;==>_GetDiskType

fatball 发表于 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)

sanhen 发表于 2008-5-19 12:46:07

用WMI获取成功。只是硬盘列表再获取分区列表暂时出问题。

fatball 发表于 2008-5-19 20:38:12

原帖由 sanhen 于 2008-5-19 12:46 发表 http://www.autoitx.com/images/common/back.gif
用WMI获取成功。只是硬盘列表再获取分区列表暂时出问题。
那用wmi获取要怎么写|基本上我只需要获取硬盘列表,分区没有所谓

sanhen 发表于 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

哇,要是能显示到分区及分区下的子文件夹、文件,那功能真...................................

dingamao 发表于 2008-5-22 14:35:13

原帖由 木纳 于 2008-5-21 23:55 发表 http://www.autoitx.com/images/common/back.gif
哇,要是能显示到分区及分区下的子文件夹、文件,那功能真...................................
那真是一个翻版的资源管理器了

qop1830 发表于 2008-6-1 14:51:13

干吗不把分区的也顺便也发出来看看呢??

hhasee 发表于 2009-7-2 13:52:34

真的很强悍啊,学习了!:face (29):

lynfr8 发表于 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 http://www.autoitx.com/images/common/back.gifLocal $var = DriveGetDrive("all")
Local $Drives = ""
If Not @error Then
Local $Var = _GetDiskType()
For $J = 1 To $Var
$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 = $Count
For $J = 1 To $Count
$Return[$J] = RegRead($Enum & RegRead($Disk, $J - 1), "FriendlyName")
Next
Return $Return
EndFunc ;==>_GetDiskType

kn007 发表于 2009-7-2 15:03:20

学习下,特别是楼上的代码

lrbin50 发表于 2009-9-9 23:52:33

没有硬盘大小的信息。喜欢那个注册表的方法。

awfymwvf 发表于 2010-5-27 10:38:41

能不能获取到分区信息呢。特别是第几硬盘的第几分区
页: [1] 2
查看完整版本: 如何获取硬盘列表?