Использование элемента управления SysInfo в VB6 для определения, когда USB-устройство было подключено / отключено - PullRequest
1 голос
/ 19 января 2011

Я добавил элемент управления SysInfo в свою форму и для проверки пытаюсь создать текстовое сообщение, когда устройство чтения карт USB подключено или отключено.

Private Sub SysInfo1_ConfigChanged(ByVal OldConfigNum As Long, ByVal NewConfigNum As Long)

    ShowText "The system configuration has changed"

End Sub

Я пробовал подобное тестовое сообщение с событием DisplayChanged и успешно получаю это сообщение, когда изменяется разрешение монитора, но я не могу на всю жизнь заставить работать вышеуказанное. У меня сложилось впечатление, что событие ConfigChanged должно происходить при добавлении / удалении USB-устройства. Я включаю SysInfo.ocx в приложение и тестирую на компьютере с Vista. Спасибо

Ответы [ 2 ]

2 голосов
/ 19 января 2011

Используйте событие SysInfo_DeviceArrival , чтобы обнаружить вставку USB-накопителя. SysInfo_DeviceRemoveComplete срабатывает при его удалении.

Существует множество событий для элемента управления SysInfo, поэтому я написал тестовую программу, чтобы увидеть, какие события происходят.Я делаю это часто, когда работаю с элементом управления, который раньше не использовал.Программа, которая выполняет SysInfoControl, включена ниже.

Я сделал это с помощью раскрывающихся списков в верхней части окна редактирования кода VB6: выберите слева элемент управления SysInfo, выберите каждое из отображаемых событийв правильном.Добавьте к каждому из них оператор Debug.Print, запустите проект и подключите свое USB-устройство.

Кроме того, если вы выбрали элемент управления SysInfo в конструкторе форм, а затем нажмите клавишу F1, справка библиотеки MSDN должна отобразить, какиевключает в себя описания всех событий и как интерпретировать их параметры.По крайней мере, так на моей машине.(Я ненавижу, когда люди говорят это, но это применимо здесь, потому что документы MSDN должны быть установлены отдельно.)

Если это не работает, я нашел документы онлайн здесь .

Option Explicit

Private Sub SysInfo_ConfigChangeCancelled()
    Debug.Print Now() & ": " & "SysInfo_ConfigChangeCancelled"
End Sub

Private Sub SysInfo_ConfigChanged(ByVal OldConfigNum As Long, ByVal NewConfigNum As Long)
    Debug.Print Now() & ": " & "SysInfo_ConfigChanged"
End Sub

Private Sub SysInfo_DeviceArrival(ByVal DeviceType As Long, ByVal DeviceID As Long, ByVal DeviceName As String, ByVal DeviceData As Long)
    Debug.Print Now() & ": " & "SysInfo_DeviceArrival"
End Sub

Private Sub SysInfo_DeviceOtherEvent(ByVal DeviceType As Long, ByVal EventName As String, ByVal DataPointer As Long)
    Debug.Print Now() & ": " & "SysInfo_DeviceOtherEvent"
End Sub

Private Sub SysInfo_DeviceQueryRemove(ByVal DeviceType As Long, ByVal DeviceID As Long, ByVal DeviceName As String, ByVal DeviceData As Long, Cancel As Boolean)
    Debug.Print Now() & ": " & "SysInfo_DeviceQueryRemove"
End Sub

Private Sub SysInfo_DeviceQueryRemoveFailed(ByVal DeviceType As Long, ByVal DeviceID As Long, ByVal DeviceName As String, ByVal DeviceData As Long)
    Debug.Print Now() & ": " & "SysInfo_DeviceQueryRemoveFailed"
End Sub

Private Sub SysInfo_DeviceRemoveComplete(ByVal DeviceType As Long, ByVal DeviceID As Long, ByVal DeviceName As String, ByVal DeviceData As Long)
    Debug.Print Now() & ": " & "SysInfo_DeviceRemoveComplete"
End Sub

Private Sub SysInfo_DeviceRemovePending(ByVal DeviceType As Long, ByVal DeviceID As Long, ByVal DeviceName As String, ByVal DeviceData As Long)
    Debug.Print Now() & ": " & "SysInfo_DeviceRemovePending"
End Sub

Private Sub SysInfo_DevModeChanged()
    Debug.Print Now() & ": " & "SysInfo_DevModeChanged"
End Sub

Private Sub SysInfo_DisplayChanged()
    Debug.Print Now() & ": " & "SysInfo_DisplayChanged"
End Sub

Private Sub SysInfo_PowerQuerySuspend(Cancel As Boolean)
    Debug.Print Now() & ": " & "SysInfo_PowerQuerySuspend"
End Sub

Private Sub SysInfo_PowerResume()
    Debug.Print Now() & ": " & "SysInfo_PowerResume"
End Sub

Private Sub SysInfo_PowerStatusChanged()
    Debug.Print Now() & ": " & "SysInfo_PowerStatusChanged"
End Sub

Private Sub SysInfo_PowerSuspend()
    Debug.Print Now() & ": " & "SysInfo_PowerSuspend"
End Sub

Private Sub SysInfo_QueryChangeConfig(Cancel As Boolean)
    Debug.Print Now() & ": " & "SysInfo_QueryChangeConfig"
End Sub

Private Sub SysInfo_SettingChanged(ByVal Item As Integer)
    Debug.Print Now() & ": " & "SysInfo_SettingChanged"
End Sub

Private Sub SysInfo_SysColorsChanged()
    Debug.Print Now() & ": " & "SysInfo_SysColorsChanged"
End Sub

Private Sub SysInfo_TimeChanged()
    Debug.Print Now() & ": " & "SysInfo_TimeChanged"
End Sub
1 голос
/ 19 января 2011

Зачем отправлять дополнительный контроль? Я бы порекомендовал взглянуть на пример SysInfo Карла Петерсона: http://vb.mvps.org/samples/SysInfo/ Класс CSysInfoDevice будет отслеживать события устройства.

...