Vb.net 未能检测到USB

Vb.net 未能检测到USB,vb.net,Vb.net,我正在开发一个应用程序,可以检测连接到计算机的USB设备。我在网上搜索后得到了以下代码: Public Class Form1 Private Const WM_DEVICECHANGE As Integer = &H219 Private Const DBT_DEVICEARRIVAL As Integer = 32768 Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If

我正在开发一个应用程序,可以检测连接到计算机的USB设备。我在网上搜索后得到了以下代码:

Public Class Form1

Private Const WM_DEVICECHANGE As Integer = &H219
Private Const DBT_DEVICEARRIVAL As Integer = 32768

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    If m.Msg = WM_DEVICECHANGE Then
        If m.WParam = DBT_DEVICEARRIVAL Then
            MessageBox.Show("Removable Drive Detected")
        End If
    End If
    MyBase.WndProc(m)
End Sub
End Class
这个代码对我来说很好用


但问题是,如果先连接USB设备,然后启动应用程序,那么它就无法检测到USB设备。

这很容易解决,只需添加一个计时器双击它输入代码,然后返回到启动窗体双击它,然后键入

   Timer1.start
这将根据计时器的滴答声比率每隔几秒钟检查一次

10000 = 10 seconds
60000 = 60 seconds
3600000 = 1 hour
7200000 = 2 hours
43200000 = half a day
86400000 = 1 day
但是,仍然存在一个问题,消息框将反复出现,并且您将有多层消息框,因此请尝试将计时器中的代码更改为:

Public Class Form1
If label1.text = "0" then 
Private Const WM_DEVICECHANGE As Integer = &H219
Private Const DBT_DEVICEARRIVAL As Integer = 32768

Label1.text = "1"
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_DEVICECHANGE Then
    If m.WParam = DBT_DEVICEARRIVAL Then
        msgbox("Removable Drive Detected", msgboxstyle.OkOnly
        if vbok then label1.text = "0"
    End If
End If
MyBase.WndProc(m)
End Sub
End Class
您将需要添加一个标签,如果您不想看到它,只需单击它转到属性(右侧)并单击


您应该删除vb6标记并添加vb.net标记。@user3561262此代码仅检测设备(任何设备,USB或非USB)何时连接到计算机。您需要做两件事:第一,获取所有设备的列表,第二,使用上面的代码触发设备的重新扫描。第一件事是看这个,我对实际的代码不太了解,但似乎你需要一个单独的代码块,在应用程序启动时检查任何USB设备
disable visible