2014-04-22 6 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 
관련 문제