使用VB6中的SysInfo控件检测USB设备何时已插入/拔出

使用VB6中的SysInfo控件检测USB设备何时已插入/拔出,vb6,usb,Vb6,Usb,我在表单中添加了一个SysInfo控件,为了测试,我试图在USB读卡器被插入或拔出时生成一条文本消息 Private Sub SysInfo1_ConfigChanged(ByVal OldConfigNum As Long, ByVal NewConfigNum As Long) ShowText "The system configuration has changed" End Sub 我尝试了一个类似的测试消息与DisplayChanged事件,并成功地收到该消息时,显示器

我在表单中添加了一个SysInfo控件,为了测试,我试图在USB读卡器被插入或拔出时生成一条文本消息

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

    ShowText "The system configuration has changed"

End Sub

我尝试了一个类似的测试消息与DisplayChanged事件,并成功地收到该消息时,显示器的分辨率被改变,但我不能为我的生活让上述工作。我的印象是,当添加/删除USB设备时,ConfigChanged事件应该发生。我将SysInfo.ocx包含在应用程序中,并在Vista机器上进行测试。谢谢

使用SysInfo\u DeviceArrival事件检测USB驱动器的插入SysInfo\u devicemovecomplete在删除时激发

SysInfo控件有很多事件,所以我编写了一个测试程序来查看发生了什么事件。我在使用以前从未使用过的控件时经常这样做。下面包含了执行SysInfoControl的程序

我使用VB6代码编辑窗口顶部的下拉列表实现了这一点:选择左侧的SysInfo控件,选择右侧显示的每个事件。向每个文件添加Debug.Print语句,运行项目,然后插入USB设备

此外,如果在窗体设计器中选择SysInfo控件,然后按F1键,则会显示MSDN库帮助,其中包括所有事件的说明以及如何解释其参数。至少在我的机器上是这样。(我讨厌人们这样说,但这里也适用,因为MSDN文档必须单独安装。)

如果这不起作用,我在网上找到了这些文件


为什么要发送一个额外的控制?我建议看一看Karl Peterson的SysInfo示例:csysinfo设备类将监视设备事件。

对不起,我应该更清楚一点。当USB设备被移除或添加到我的机器时,SysInfo_DeviceArrival、SysInfo_DeviceRemoveComplete或SysInfo_ConfigChanged会触发,尽管Windows可以识别它们。我可以通过更改显示器分辨率将SysInfo_Display更改为fire,但无法从USB设备的移除/插入中获得任何响应。除了列出相关事件外,这些文档在设备方面并没有特别的启发作用。
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