如何通过VB6获取磁盘编号 比如 c:盘,返回 1:1 E盘 返回1:3

baidu_35732800 2016-08-21 10:35:08
GHOST的,把第2个磁盘的第2分区镜像,还原至第一个磁盘的第1个分区

如何通过VB6获取磁盘编号

比如 c:盘,返回 1:1 E盘 返回1:3

找到了下面的代码 使用时发现 C盘 会返回1:1 D盘1:2 但E盘 之后 还会 提示 1:2

求高手帮我看看 多谢

Public DL_R As String
Public DL_PN As String
Public DL_PD As String
Private Sub Get_PN(DL As String)
WQL = "Associators of {win32_LogicalDisk='" & DL & "'} where resultClass = Win32_DiskPartition"
Set Pattions = GetObject("winmgmts:").ExecQuery(WQL)
For Each Pat In Pattions
DL_PN = Pat.Name
DL_PD = Pat.DiskIndex
DL_R = CInt(DL_PD + 1) & ":" & CInt(Right(DL_PN, 1) + 1 + 1)
Next
End Sub

Private Sub Command1_Click()
Label1.Caption = DL_R
End Sub

Private Sub Drive1_Change()
Get_PN (Left(Drive1.Drive, 2))
Label1.Caption = DL_R
End Sub

Private Sub Form_Load()
Get_PN (Left(Drive1.Drive, 2))
Label1.Caption = DL_R
End Sub
...全文
431 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
一如既往哈 2016-08-21
  • 打赏
  • 举报
回复
直接找wmi呀,看来你没找对。看看这样是不是你要的,仅供参考:


Sub ListDrivesAndPartions()
    Dim wmiServices, wmiDiskDrives, wmiDiskDrive
    Dim strEscapedDeviceID, wmiDiskPartitions, wmiDiskPartition
    Dim wmiLogicalDisks, wmiLogicalDisk
    Set wmiServices = GetObject("winmgmts:{impersonationLevel=Impersonate}!//.")
    Set wmiDiskDrives = wmiServices.ExecQuery("SELECT Caption, DeviceID FROM Win32_DiskDrive")
    For Each wmiDiskDrive In wmiDiskDrives
        Debug.Print wmiDiskDrive.Caption & " (" & wmiDiskDrive.DeviceID & ")"
        strEscapedDeviceID = Replace(wmiDiskDrive.DeviceID, "\", "\\", 1, -1, vbTextCompare)
        Set wmiDiskPartitions = wmiServices.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" _
        & strEscapedDeviceID & """} WHERE AssocClass = Win32_DiskDriveToDiskPartition")
        For Each wmiDiskPartition In wmiDiskPartitions
            Debug.Print vbTab & wmiDiskPartition.DeviceID
            Set wmiLogicalDisks = wmiServices.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" _
            & wmiDiskPartition.DeviceID & """} WHERE AssocClass = Win32_LogicalDiskToPartition")
            For Each wmiLogicalDisk In wmiLogicalDisks
                Debug.Print vbTab & vbTab & wmiLogicalDisk.DeviceID
            Next
        Next
    Next
End Sub
''
..
舉杯邀明月 2016-08-21
  • 打赏
  • 举报
回复
DL_R = CInt(DL_PD + 1) & ":" & CInt(Right(DL_PN, 1) + 1 + 1) 你这样写的,哪有可能得到 1:1这个结果? 假设如你所说,C盘1:1,D盘1:2,E盘及之后的都是1:3, 那么说明你的这块磁盘分区为:  C为第1个主分区,D为第2个主分区,  然后划分了一个扩展分区,再划分逻辑分区E、F、…………
baidu_35732800 2016-08-21
  • 打赏
  • 举报
回复
有高手帮忙 看一下 多谢了
baidu_35732800 2016-08-21
  • 打赏
  • 举报
回复
引用 6 楼 Chen8013 的回复:
[quote=引用 5 楼 baidu_35732800 的回复:] [quote=引用 3 楼 Topc008 的回复:] 直接找wmi呀,看来你没找对。看看这样是不是你要的,仅供参考:


Sub ListDrivesAndPartions()
    Dim wmiServices, wmiDiskDrives, wmiDiskDrive
    Dim strEscapedDeviceID, wmiDiskPartitions, wmiDiskPartition
    Dim wmiLogicalDisks, wmiLogicalDisk
    Set wmiServices = GetObject("winmgmts:{impersonationLevel=Impersonate}!//.")
    Set wmiDiskDrives = wmiServices.ExecQuery("SELECT Caption, DeviceID FROM Win32_DiskDrive")
    For Each wmiDiskDrive In wmiDiskDrives
        Debug.Print wmiDiskDrive.Caption & " (" & wmiDiskDrive.DeviceID & ")"
        strEscapedDeviceID = Replace(wmiDiskDrive.DeviceID, "\", "\\", 1, -1, vbTextCompare)
        Set wmiDiskPartitions = wmiServices.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" _
        & strEscapedDeviceID & """} WHERE AssocClass = Win32_DiskDriveToDiskPartition")
        For Each wmiDiskPartition In wmiDiskPartitions
            Debug.Print vbTab & wmiDiskPartition.DeviceID
            Set wmiLogicalDisks = wmiServices.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" _
            & wmiDiskPartition.DeviceID & """} WHERE AssocClass = Win32_LogicalDiskToPartition")
            For Each wmiLogicalDisk In wmiLogicalDisks
                Debug.Print vbTab & vbTab & wmiLogicalDisk.DeviceID
            Next
        Next
    Next
End Sub
''
..
多谢哥们!我测试了 得到的不是我想要的结果 不过真心感谢您[/quote] 要我说,这就是“正确结果”了。 自己在启动程序时,把这个“信息树”处理一下。 然后,直接按“逻辑驱动器号”在这个处理结果中查就是了。 [/quote] 好吧 我研究研究 多谢!嘻嘻!
舉杯邀明月 2016-08-21
  • 打赏
  • 举报
回复
引用 5 楼 baidu_35732800 的回复:
[quote=引用 3 楼 Topc008 的回复:] 直接找wmi呀,看来你没找对。看看这样是不是你要的,仅供参考:


Sub ListDrivesAndPartions()
    Dim wmiServices, wmiDiskDrives, wmiDiskDrive
    Dim strEscapedDeviceID, wmiDiskPartitions, wmiDiskPartition
    Dim wmiLogicalDisks, wmiLogicalDisk
    Set wmiServices = GetObject("winmgmts:{impersonationLevel=Impersonate}!//.")
    Set wmiDiskDrives = wmiServices.ExecQuery("SELECT Caption, DeviceID FROM Win32_DiskDrive")
    For Each wmiDiskDrive In wmiDiskDrives
        Debug.Print wmiDiskDrive.Caption & " (" & wmiDiskDrive.DeviceID & ")"
        strEscapedDeviceID = Replace(wmiDiskDrive.DeviceID, "\", "\\", 1, -1, vbTextCompare)
        Set wmiDiskPartitions = wmiServices.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" _
        & strEscapedDeviceID & """} WHERE AssocClass = Win32_DiskDriveToDiskPartition")
        For Each wmiDiskPartition In wmiDiskPartitions
            Debug.Print vbTab & wmiDiskPartition.DeviceID
            Set wmiLogicalDisks = wmiServices.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" _
            & wmiDiskPartition.DeviceID & """} WHERE AssocClass = Win32_LogicalDiskToPartition")
            For Each wmiLogicalDisk In wmiLogicalDisks
                Debug.Print vbTab & vbTab & wmiLogicalDisk.DeviceID
            Next
        Next
    Next
End Sub
''
..
多谢哥们!我测试了 得到的不是我想要的结果 不过真心感谢您[/quote] 要我说,这就是“正确结果”了。 自己在启动程序时,把这个“信息树”处理一下。 然后,直接按“逻辑驱动器号”在这个处理结果中查就是了。
baidu_35732800 2016-08-21
  • 打赏
  • 举报
回复
引用 3 楼 Topc008 的回复:
直接找wmi呀,看来你没找对。看看这样是不是你要的,仅供参考:


Sub ListDrivesAndPartions()
    Dim wmiServices, wmiDiskDrives, wmiDiskDrive
    Dim strEscapedDeviceID, wmiDiskPartitions, wmiDiskPartition
    Dim wmiLogicalDisks, wmiLogicalDisk
    Set wmiServices = GetObject("winmgmts:{impersonationLevel=Impersonate}!//.")
    Set wmiDiskDrives = wmiServices.ExecQuery("SELECT Caption, DeviceID FROM Win32_DiskDrive")
    For Each wmiDiskDrive In wmiDiskDrives
        Debug.Print wmiDiskDrive.Caption & " (" & wmiDiskDrive.DeviceID & ")"
        strEscapedDeviceID = Replace(wmiDiskDrive.DeviceID, "\", "\\", 1, -1, vbTextCompare)
        Set wmiDiskPartitions = wmiServices.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" _
        & strEscapedDeviceID & """} WHERE AssocClass = Win32_DiskDriveToDiskPartition")
        For Each wmiDiskPartition In wmiDiskPartitions
            Debug.Print vbTab & wmiDiskPartition.DeviceID
            Set wmiLogicalDisks = wmiServices.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" _
            & wmiDiskPartition.DeviceID & """} WHERE AssocClass = Win32_LogicalDiskToPartition")
            For Each wmiLogicalDisk In wmiLogicalDisks
                Debug.Print vbTab & vbTab & wmiLogicalDisk.DeviceID
            Next
        Next
    Next
End Sub
''
..
多谢哥们!我测试了 得到的不是我想要的结果 不过真心感谢您
baidu_35732800 2016-08-21
  • 打赏
  • 举报
回复
引用 2 楼 Chen8013 的回复:
DL_R = CInt(DL_PD + 1) & ":" & CInt(Right(DL_PN, 1) + 1 + 1) 你这样写的,哪有可能得到 1:1这个结果? 假设如你所说,C盘1:1,D盘1:2,E盘及之后的都是1:3, 那么说明你的这块磁盘分区为:  C为第1个主分区,D为第2个主分区,  然后划分了一个扩展分区,再划分逻辑分区E、F、…………
引用 2 楼 Chen8013 的回复:
DL_R = CInt(DL_PD + 1) & ":" & CInt(Right(DL_PN, 1) + 1 + 1) 你这样写的,哪有可能得到 1:1这个结果? 假设如你所说,C盘1:1,D盘1:2,E盘及之后的都是1:3, 那么说明你的这块磁盘分区为:  C为第1个主分区,D为第2个主分区,  然后划分了一个扩展分区,再划分逻辑分区E、F、…………
多谢@Chen8013 我再研究研究 如果您方便也帮我看看!

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧