|
分類:[VB.NET/VB2005 以降]
こんにちは、お世話になります。
XPpro+VB2008
USBデバイスの検出したくいろいろ調べています。 下記のサンプルコードでは、USBデバイスの抜き差しの検知はできるようになっていますが、 ただし、USBメモリリーダーに挿入しても反応しません。この問題を解決したくご質問させていただきました。 どうぞよろしくお願い致します。 参照URL: ttp://hcs-papa.seesaa.net/article/169705315.html
サンプルコード-------------ここから-------------------------
Private WM_DEVICECHANGE = &H219 Private Enum DBT As Int32 DBT_DEVICEARRIVAL = &H8000 DBT_DEVICEQUERYREMOVE = &H8001 DBT_DEVICEQUERYREMOVEFAILED = &H8002 DBT_DEVICEREMOVEPENDING = &H8003 DBT_DEVICEREMOVECOMPLETE = &H8004 End Enum Private Enum DBT_DEVICETYPE DBT_DEVICETYPE_OEM = &H0 DBT_DEVICETYPE_DEVNODE = &H1 DBT_DEVICETYPE_VOLUME = &H2 DBT_DEVICETYPE_PORT = &H3 DBT_DEVICETYPE_NET = &H4 DBT_DEVICETYPE_DEVICEINTERFACE = &H5 DBT_DEVICETYPE_HANDLE = &H6 End Enum Public Structure DEV_BROADCAST_VOLUME Public dbcv_size As UInt32 Public dbcv_devicetype As UInt32 Public dbcv_reserved As UInt32 Public dbcv_unitmask As UInt32 End Structure Protected Overrides Sub WndProc(ByRef m As _ System.Windows.Forms.Message) Select Case m.Msg Case WM_DEVICECHANGE Dim dbv As New DEV_BROADCAST_VOLUME dbv = _ Marshal.PtrToStructure(m.LParam, _ GetType(DEV_BROADCAST_VOLUME)) If dbv.dbcv_devicetype = _ DBT_DEVICETYPE.DBT_DEVICETYPE_VOLUME Then Dim drv As String = "" drv = getDriveString(dbv.dbcv_unitmask) Select Case m.WParam.ToInt32 Case DBT.DBT_DEVICEARRIVAL MessageBox.Show(drv & "を取り付けた!") Case DBT.DBT_DEVICEREMOVECOMPLETE MessageBox.Show(drv & "を取り外した!") Case Else End Select End If Case Else End Select MyBase.WndProc(m) End Sub
Private Function getDriveString(ByVal lParam As Int32) As String getDriveString = "" Dim I As Integer For I = 0 To 25 If lParam And 1 Then Exit For End If lParam >>= 1 Next If I >= 26 Then Exit Function End If getDriveString = Chr(Asc("A") + I) End Function サンプルコード-------------ここまで-------------------------
|