VB6获取USB装置的拔出信息每次软件开启的第一次都不灵,什么原因呀

VB6获取USB设备的拔出信息每次软件开启的第一次都不灵,什么原因呀?VB codePublic Function WndProc(ByVal

VB6获取USB设备的拔出信息每次软件开启的第一次都不灵,什么原因呀?

VB code
Public Function WndProc(ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long '消息拦截 当有消息时候会在这里出现    If msg = WM_DEVICECHANGE Then '当消息是 磁盘发生改变        Select Case Menu            Case NET_MENU                DeviceNet.tmrUSB.Enabled = True: DoEvents            Case LED_MENU                LEDsignal.tmrConnect.Enabled = True            Case CH_MENU                SelectCH.tmrTelCom.Enabled = True: DoEvents            Case Else        End Select    End If    WndProc = CallWindowProcA(lpPrev, hWnd, msg, wParam, lParam) '返回消息给系统否则系统所有消息都被拦截 你的电脑几乎就是废了 关机都不行End Function'使用定时器的查询来获取是插入,还是拔出。Private Sub tmrConnect_Timer()      '查检USB状态    Dim i As Integer        Call ConnectRMC    If FindTheHid = True Then        tmrConnect.Enabled = False: DoEvents                Label5.Caption = "请勿移动协调器!"        Call Led_On(1, GREEN)                tmrData.Enabled = True: DoEvents      '数据收发    Else        Label5.Caption = "请接入协调器!"        If Check(1) = 1 Then            Call Led_On(1, RED)        Else            Call Led_On(1, BLACK)        End If        ShowWindow Me.hWnd, SW_RESTORE        tmrData.Enabled = False: DoEvents        'tmrConnect.Enabled = True: DoEvents    End IfEnd Sub


VB6获取USB设备的拔出信息每次软件开启的第一次都不灵,什么原因呀?EXE有两个界面,只要我重新打开一下界面,就能捕获USB设备的拔出信息了。

但奇怪的是,每次插入都能捕获取哦,这样我很头痛呀……
还有,怎么捕获单单我这个USB设备的消息呀?而不是所有U口发生的消息?

[解决办法]

不需要定时器。直接利用系统的 OnDeviceChange 消息。

wParam = DBT_DEVICEREMOVECOMPLETE 就是设备移除。
[解决办法]
有些自定义设备是得不到参数的,值始终为 0。

那就在得到 OnDeviceChange 消息时尝试打开设备。得到设备句柄就是设备上来了,否则就认为设备不存在。