找回密码
 加入
搜索
查看: 2514|回复: 5

[AU3基础] wmi语句老提示错误是怎么回事?[已解决]

  [复制链接]
发表于 2012-3-16 01:42:12 | 显示全部楼层 |阅读模式
本帖最后由 haijie1223 于 2012-3-16 08:10 编辑

代码来自论坛,地址:http://www.autoitx.com/forum.php ... 2&highlight=wmi
为什么在我的电脑上运行老提示语句错误,难道在别人的电脑上可以?还是语句确实有错误?

GetPartionMsg("", 1)        ;GetPartionMsg 的第一个参数可以是 USB、IDE 等;如果不带任何参数,则是检测所有磁盘分区
                                                ;第二个参数可以是 1、0,1 表示 TRUE,0 表示 FALSE;如果第一个参数为空,则第二个必需为 1
 
Func GetPartionMsg($Interface, $b)
        $objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
        $colItems = $objWMIService.ExecQuery ("Select * from Win32_LogicalDiskToPartition")
        $DiskInfo = ""
        $DiskInfoCombo = ""
        For $objItem In $colItems
                $DiskFH = StringLeft(StringRight($objItem.Dependent, 3), 2)
                $PartNum = QueryDiskNum($DiskFH)
                $PartMsg = QueryPartitionVolume($DiskFH)
                If $Interface <> "" Then
                        If $b = 1 Then
                                If StringMid($PartNum, 2, 3) = $Interface Then
                                        $DiskInfo = $DiskInfo & $PartNum & $DiskFH & $PartMsg & @CRLF
                                EndIf
                        ElseIf $b = 0 Then
                                If StringMid($PartNum, 2, 3) <> $Interface Then
                                        $DiskInfo = $DiskInfo & $PartNum & $DiskFH & $PartMsg & @CRLF
                                EndIf
                        EndIf
                Else
                        $DiskInfo = $DiskInfo & $PartNum & $DiskFH & $PartMsg & @CRLF
                EndIf
        Next
        MsgBox(64, "磁盘信息", $DiskInfo)
EndFunc   ;==>GetPartionMsg
 
Func QueryDiskInterface($n)
        $objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
        $colItems = $objWMIService.ExecQuery ("Select * from Win32_DiskDrive Where Index=" & $n)
        For $objItem In $colItems
                Return $objItem.InterfaceType
        Next
EndFunc   ;==>QueryDiskInterface
 
Func QueryPartitionVolume($v)
        $objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
        $colItems = $objWMIService.ExecQuery ("Select * from Win32_LogicalDisk Where DeviceID='" & $v & "'")
        For $objItem In $colItems
                Return $objItem.VolumeName & "" & $objItem.FileSystem & "_" & CalcKMG($objItem.Size) & "_" & $objItem.Description
        Next
EndFunc   ;==>QueryPartitionVolume
 
Func QueryDiskNum($d)
        $objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
        $colItems = $objWMIService.ExecQuery ("Associators of {win32_LogicalDisk.DeviceID='" & $d & "'} where ResultClass = Win32_DiskPartition")
        For $colItem In $colItems
                Return "(" & QueryDiskInterface($colItem.DiskIndex) & ":hd" & $colItem.DiskIndex & ")" 
        Next
EndFunc   ;==>QueryDiskNum
 
Func CalcKMG($n)
        If $n < 1024 Then
                Return $n & "Byte" 
        ElseIf $n < 1048576 Then
                Return Round($n / 1024, 2) & "KB" 
        ElseIf $n < 1073741824 Then
                Return Round($n / 1048576, 2) & "MB" 
        Else
                Return Round($n / 1073741824, 2) & "GB" 
        EndIf
EndFunc   ;==>CalcKMG

评分

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

查看全部评分

发表于 2012-3-16 02:46:40 | 显示全部楼层
回复 1# haijie1223

Win7上没问题...
发表于 2012-3-16 03:08:42 | 显示全部楼层
Xp sp3 3.3.6.1 正常
 楼主| 发表于 2012-3-16 08:06:31 | 显示全部楼层
回复 3# afan


    确实如此,我用的是3.3.9.0-1。难道是新版本的对象语句有变化?
发表于 2012-3-16 08:37:35 | 显示全部楼层
SVN:988即可。
发表于 2012-3-16 08:56:35 | 显示全部楼层
楼主是怎么解决的?能不能共享一下了?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 11:21 , Processed in 0.083937 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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