C# 检测最后连接的 USB 驱动器 USB 协议(usb3 或 2)

C# detect last connected usb drives USB Protocol (usb3 or 2)

我正在尝试编写一个简单的轻型应用程序,它会告诉您最后连接的 USB 驱动器是否以 USB 3 或 USB 2 速度协商。 到目前为止,我只成功地用 Win32_DiskDrive 显示了最后一个连接的驱动器,并带有一些开源代码,但我无法检索有关它正在运行的设备速度的任何信息。 我发现 Win32_USBControllerDevice 确实有一个 "negotiatedspeed" 属性。 但是我找不到任何有关如何使用它构建控制台应用程序的有用资源。 也许有人有代码片段供我使用? 感谢您的帮助!

我找到了一个可行的解决方案 here

它是如何工作的?好吧,它枚举了 USB 主机控制器。获取 Root Hub 并枚举拥有它的端口。如果有连接的设备不是集线器,则它会显示如下所需信息:

示例代码:

    private static void Main( string[] args )
    {
        var hostCtrls = USB.GetHostControllers();

        foreach ( var hostCtrl in hostCtrls )
        {
            var hub = hostCtrl.GetRootHub();
            foreach ( var port in hub.GetPorts() )
            {
                if ( port.IsDeviceConnected && !port.IsHub )
                {
                    var device = port.GetDevice();
                    Console.WriteLine( "Serial: " + device.DeviceSerialNumber );
                    Console.WriteLine( "Name: " + device.Name );
                    Console.WriteLine( "Speed:  " + port.Speed );
                    Console.WriteLine( "Port:   " + device.PortNumber + Environment.NewLine );
                }
            }
        }
        Console.ReadLine();
    }