首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

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

2013-01-26 
VB6获取USB设备的拔出信息每次软件开启的第一次都不灵,什么原因呀?Public Function WndProc(ByVal hWnd As

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

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 If
End Sub


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

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

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

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

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

热点排行