2014-04-22 49 views
3

我正在研究應檢測連接到計算機的USB設備的應用程序。我得到了下面的代碼在互聯網上搜索後:未能檢測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設備。

+0

您應該刪除VB6的標籤,並添加VB .net標記代替。 –

+0

@ user3561262該代碼僅在設備 - *任何*設備,USB或非USB設備連接到計算機時纔會檢測到。 –

+0

您需要做兩件事:首先,獲取所有設備的列表,其次,使用上面的代碼觸發設備的重新掃描。首先看到這個http://stackoverflow.com/a/3331509/231316 –

回答

0

這很簡單修復只需添加就可以了計時器雙擊輸入代碼,然後回到你的啓動窗體雙擊它,然後鍵入

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 

您將需要添加一個標籤,如果你不希望看到它只需點擊它轉到屬性(右側)和

disable visible