如题,用getdrivetype不能识别本地硬盘和移动硬盘,两个类型一样

解决方案 »

  1.   

    其实监视USB可以实现的
    在没插入前保存目前分区信息
    当插入后再遍历一次即可
      

  2.   

    to 陈辉:
    这种方法我也想到了,觉得挺麻烦,不知道有没有更好的方法,用api实现
      

  3.   

    啊|~~~
    呵呵移动硬盘的盘符是怎么排列的,没用过不过你可以去我的BLOG上看看判断U盘那个,,,是拦截的消息。估计移动硬盘插入也有对应消息发送到各个窗口吧。。
      

  4.   

    请看这个地址http://chenhui530.com/forum/viewthread.php?tid=178&extra=page%3D1
    我的论坛还有更多的精彩文章和原创作品更多的VB源码等着你来下载
      

  5.   

    to 陈辉:
    主要问题是怎么判断现在移动硬盘是否已经插上了,判断出来这样遍历出来的磁盘盘符才是正确的。把代码贴出来,马上加分!用 OnDeviceChange API:Option ExplicitPrivate Type DEV_BROADCAST_HDR
        dbch_size           As Long
        dbch_devicetype     As Long
        dbch_reserved       As Long
    End TypePrivate Type DEV_BROADCAST_VOLUME
        DBCV_Size           As Long
        DBCV_DeviceType     As Long
        DBCV_Reserved       As Long
        DBCV_UnitMask       As Long
        DBCV_Flags          As Integer
    End TypePublic Type AUTO_RUN
        Flags As String
    End TypePrivate Declare Function CallWindowProc Lib "user32" _
        Alias "CallWindowProcA" _
       (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, _
         ByVal Msg As Long, ByVal wParam As Long, _
         ByVal lParam As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" _
       Alias "SetWindowLongA" _
      (ByVal hWnd As Long, ByVal nIndex As Long, _
       ByVal wNewWord As Long) As LongPrivate Const GWL_WNDPROC                As Long = (-4)
    Private Const DBT_DEVICEARRIVAL          As Long = 32768
    Private Const DBT_DEVICEREMOVECOMPLETE   As Long = 32772
    Private Const DBT_DEVTYP_VOLUME          As Long = &H2
    Public Const WM_CLOSE                   As Long = &H10
    Private Const WM_DEVICECHANGE            As Long = &H219Public DeviceCallBack           As Long'在你的主窗体调用这个函数
    Public Sub StartUSBWatch(ByVal hWnd As Long)
        DeviceCallBack = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf OnDeviceChange)
    End Sub'退出程序时调用这个函数
    Public Sub StopUSBWatch(ByVal hWnd As Long)
        DeviceCallBack = SetWindowLong(hWnd, GWL_WNDPROC, DeviceCallBack)
    End SubPublic Function OnDeviceChange(ByVal hWnd As Long, _
        ByVal Msg As Long, _
        ByVal wParam As Long, _
        ByVal lParam As Long) As Long
        
        If Msg = WM_DEVICECHANGE Then
            '在这里添加你的代码
        End If
        OnDeviceChange = CallWindowProc(DeviceCallBack, hWnd, Msg, wParam, lParam)
    End Function
      

  6.   

    楼上的去看看我的代码
    使用WMI更简单而且比你的这个方法要好的多
      

  7.   

    >楼上的去看看我的代码
    >使用WMI更简单而且比你的这个方法要好的多看你的代码太难了,还要10点以上阅读权限。我哪里有?你为何不贴出来?
      

  8.   

    of123() ( ) 信誉:125    Blog  2007-02-12 12:35:08  得分: 0  
     
     
       >楼上的去看看我的代码
    >使用WMI更简单而且比你的这个方法要好的多看你的代码太难了,还要10点以上阅读权限。我哪里有?你为何不贴出来?
      
     
    注册会员即可察看了
      

  9.   

    http://chenhui530.com/forum/viewthread.php?tid=184&extra=page%3D1
      

  10.   

    更正一下,你的代码修改一下能用,你重写一个吧,我不会改
    问一下,能不能不引用wmi判断
    (打破沙锅问到底,呵呵)
      

  11.   

    我根据你的代码改了改能用了,但是还是想问能不能不引用wmi判断
      

  12.   

    不用WMI我确实目前还没想到办法解决