电脑接上移动硬盘时,如何让自己的程序自动识别电脑已经接上了硬盘?
换句话说,电脑接上移动硬盘时,windows系统会触发什么事件,而我们用什么方法才可以捕获这个事件?
因为我发现每次接上去时window都是自动识别并且自动安装移动硬盘的,那么我们的程序可不可以像window一样可以自动识别呢?

解决方案 »

  1.   

    WMI我博客上有~~
    http://blog.csdn.net/chenhui530
      

  2.   

    多谢陈辉给我们提供的代码!下面是从陈辉个人空间抄来的代码,但是还没有调试,不知道会怎么样:
    VERSION 5.00
    Begin VB.Form frmMain 
       Caption         =   "Form1"
       ClientHeight    =   3090
       ClientLeft      =   60
       ClientTop       =   450
       ClientWidth     =   4680
       LinkTopic       =   "Form1"
       ScaleHeight     =   3090
       ScaleWidth      =   4680
       StartUpPosition =   3  '窗口缺省
    End
    Attribute VB_Name = "frmMain"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option ExplicitPrivate WithEvents CreateDriveEvent As SWbemSink
    Attribute CreateDriveEvent.VB_VarHelpID = -1
    Private WithEvents DeleteDriveEvent As SWbemSink
    Attribute DeleteDriveEvent.VB_VarHelpID = -1
    Private WithEvents ModificationDriveEvent As SWbemSink
    Attribute ModificationDriveEvent.VB_VarHelpID = -1
    Private objSWbemServices As SWbemServicesPrivate Sub Form_Load()
        StartMonitorCreateDriveEvent
        StartMonitorDeleteDriveEvent
    '    StartMonitorModificationDriveEvent
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
        CreateDriveEvent.Cancel
        DeleteDriveEvent.Cancel
    '    ModificationDriveEvent.Cancel
    End Sub'驱动器创建事件
    Private Sub CreateDriveEvent_OnObjectReady(ByVal objWbemObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)    MsgBox objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("Name").ValueEnd Sub
    'dim ss as WbemScripting.
     '驱动器删除事件
    Private Sub DeleteDriveEvent_OnObjectReady(ByVal objWbemObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)
        MsgBox objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("Name").Value
    End Sub'驱动器属性变更事件
    Private Sub ModificationDriveEvent_OnObjectReady(ByVal objWbemObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)
        MsgBox "修改了" & objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("Name").Value
    End Sub
    Private Sub StartMonitorCreateDriveEvent()
        Set CreateDriveEvent = New SWbemSink
        Set objSWbemServices = GetObject("winmgmts:\\.\root\cimv2")
        objSWbemServices.ExecNotificationQueryAsync CreateDriveEvent, "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_LogicalDisk'"
    End SubPrivate Sub StartMonitorDeleteDriveEvent()
        Set DeleteDriveEvent = New SWbemSink
        Set objSWbemServices = GetObject("winmgmts:\\.\root\cimv2")
        objSWbemServices.ExecNotificationQueryAsync DeleteDriveEvent, "SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_LogicalDisk'"
    End SubPrivate Sub StartMonitorModificationDriveEvent()
        Set ModificationDriveEvent = New SWbemSink
        Set objSWbemServices = GetObject("winmgmts:\\.\root\cimv2")
        objSWbemServices.ExecNotificationQueryAsync ModificationDriveEvent, "SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_LogicalDisk'"
    End Sub