2013-05-24 3 views
1

Мне нужна функциональность в моей программе (написанная на VB.NET), которая определяет, вставлено или удалено USB-портативное устройство (Windows CE 5.0). Я нашел код VB.NET из Интернета, но он работает только с USB-накопителями ... Я только нашел коды и примеры программ (написанных на C++), которые делают это обнаружение USB-портативного устройства, но я не могу понять логику/программа потока, так что я не могу преобразовать его в VB.NETОбнаружение портативных устройств

Вот коды VB.NET, который обнаруживает USB Storage Devices (обнаружение недостатков для портативных устройств USB):

Public Class Form1 

    Private WM_DEVICECHANGE As Integer = &H219 

    Public Enum WM_DEVICECHANGE_WPPARAMS As Integer 
     DBT_CONFIGCHANGECANCELED = &H19 
     DBT_CONFIGCHANGED = &H18 
     DBT_CUSTOMEVENT = &H8006 
     DBT_DEVICEARRIVAL = &H8000 
     DBT_DEVICEQUERYREMOVE = &H8001 
     DBT_DEVICEQUERYREMOVEFAILED = &H8002 
     DBT_DEVICEREMOVECOMPLETE = &H8004 
     DBT_DEVICEREMOVEPENDING = &H8003 
     DBT_DEVICETYPESPECIFIC = &H8005 
     DBT_DEVNODES_CHANGED = &H7 
     DBT_QUERYCHANGECONFIG = &H17 
     DBT_USERDEFINED = &HFFFF 
    End Enum 

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
     If m.Msg = WM_DEVICECHANGE Then 
      Select Case m.WParam 
       Case WM_DEVICECHANGE_WPPARAMS.DBT_DEVICEARRIVAL 
        lblMessage.Text = "USB Inserted" 
       Case WM_DEVICECHANGE_WPPARAMS.DBT_DEVICEREMOVECOMPLETE 
        lblMessage.Text = "USB Removed" 
       End Select 
     End If 
     MyBase.WndProc(m) 
    End Sub 
End Class 

что я должен добавить к этому коду, чтобы он мог обнаружить USB-портативные устройства USB USB? мне нужны коды, чтобы быть в VB.Net ...

КСТАТИ Используя программу, написанную на C++, он говорит, что мой USB Портативное устройство имеет следующие свойства:

VID - 045E 
PID - 00CE 

Благодарность за помощь ! :)

+0

Можете ли вы более четко определить «переносные устройства»? Вы говорите, что найденный вами код обнаруживает только устройства хранения, поэтому какие другие классы устройств вы ищете? Я нашел [это] (http://stackoverflow.com/questions/8779475/how-to-detect-insertion-and-removal-of-other-usb-peripherals). Вопрос о обнаружении вставки USB-устройства. Это может помочь. – Adrian

+0

О, извините. через USB-портативное устройство я имею в виду карманные устройства, такие как мобильные устройства, сканеры штрих-кодов или RFID-считыватели ... не типичные флэш-накопители или внешние жесткие диски (устройства хранения), которые используют USB в качестве своего подключения к ПК :) – athancardenas

ответ

1
Imports System.Runtime.InteropServices 
Public Class Form1 
'Used to detected if any of the messages are any of these constants values. 
Private Const WM_DEVICECHANGE As Integer = &H219 
Private Const DBT_DEVICEARRIVAL As Integer = &H8000 
Private Const DBT_DEVICEREMOVECOMPLETE As Integer = &H8004 
Private Const DBT_DEVTYP_VOLUME As Integer = &H2 ' 
' 
'Get the information about the detected volume. 
Private Structure DEV_BROADCAST_VOLUME 
    Dim Dbcv_Size As Integer 
    Dim Dbcv_Devicetype As Integer 
    Dim Dbcv_Reserved As Integer 
    Dim Dbcv_Unitmask As Integer 
    Dim Dbcv_Flags As Short 
End Structure 

Protected Overrides Sub WndProc(ByRef M As System.Windows.Forms.Message) 
    ' 
    'These are the required subclassing codes for detecting device based removal and arrival. 
    ' 
    If M.Msg = WM_DEVICECHANGE Then 
     Select Case M.WParam 
      ' 
      'Check if a device was added. 
      Case DBT_DEVICEARRIVAL 
       Dim DevType As Integer = Runtime.InteropServices.Marshal.ReadInt32(M.LParam, 4) 
       If DevType = DBT_DEVTYP_VOLUME Then 
        Dim Vol As New DEV_BROADCAST_VOLUME 
        Vol = Runtime.InteropServices.Marshal.PtrToStructure(M.LParam, GetType(DEV_BROADCAST_VOLUME)) 
        If Vol.Dbcv_Flags = 0 Then 
         For i As Integer = 0 To 20 
          If Math.Pow(2, i) = Vol.Dbcv_Unitmask Then 
           Dim Usb As String = Chr(65 + i) + ":\" 
           MsgBox("Looks like a USB device was plugged in!" & vbNewLine & vbNewLine & "The drive letter is: " & Usb.ToString) 
           Exit For 
          End If 
         Next 
        End If 
       End If 
       ' 
       'Check if the message was for the removal of a device. 
      Case DBT_DEVICEREMOVECOMPLETE 
       Dim DevType As Integer = Runtime.InteropServices.Marshal.ReadInt32(M.LParam, 4) 
       If DevType = DBT_DEVTYP_VOLUME Then 
        Dim Vol As New DEV_BROADCAST_VOLUME 
        Vol = Runtime.InteropServices.Marshal.PtrToStructure(M.LParam, GetType(DEV_BROADCAST_VOLUME)) 
        If Vol.Dbcv_Flags = 0 Then 
         For i As Integer = 0 To 20 
          If Math.Pow(2, i) = Vol.Dbcv_Unitmask Then 
           Dim Usb As String = Chr(65 + i) + ":\" 
           MsgBox("Looks like a volume device was removed!" & vbNewLine & vbNewLine & "The drive letter is: " & Usb.ToString) 
           Exit For 
          End If 
         Next 
        End If 
       End If 
     End Select 
    End If 
    MyBase.WndProc(M) 
End Sub 
End Class 
+0

лучше дать некоторые объяснение вашего ответа в простых словах, чем просто выброс кодов! –

Смежные вопросы