C++ 如何以编程方式检测PC是否具有USB3功能?

C++ 如何以编程方式检测PC是否具有USB3功能?,c++,windows,usb,C++,Windows,Usb,这似乎应该是一个简单的问题,但我不确定如何最好地解决它。我看过一些关于如何检测连接的设备是USB 2还是USB 3的帖子,但我需要知道USB 3端口是否可用,即使没有连接设备 一种解决方案是遍历注册表中的“SYSTEM\CurrentControlSet\Services”键,并与已知USB3服务的预设列表进行比较。我希望有更准确的信息,比如IOCTL电话 我可以实现C++(首选)或C>< /P> 提前感谢您的帮助。以下是我如何实现此功能的。这不是我想要的解决方案。这基本上会告诉我系统上是否存在

这似乎应该是一个简单的问题,但我不确定如何最好地解决它。我看过一些关于如何检测连接的设备是USB 2还是USB 3的帖子,但我需要知道USB 3端口是否可用,即使没有连接设备

一种解决方案是遍历注册表中的“SYSTEM\CurrentControlSet\Services”键,并与已知USB3服务的预设列表进行比较。我希望有更准确的信息,比如IOCTL电话

我可以实现C++(首选)或C>< /P>
提前感谢您的帮助。

以下是我如何实现此功能的。这不是我想要的解决方案。这基本上会告诉我系统上是否存在USB 3.0驱动程序。它不会检测系统上的硬件是否包含USB 3.0端口。希望C++中有较低的级别。 如果有人能告诉我如何检测硬件,我将不胜感激(而不仅仅是熔渣和不贡献)。谢谢


这正是我想要的:

http://read.pudn.com/downloads105/sourcecode/windows/vxd/432626/USBLib/USB.cs__.htm
然后,我添加了以下代码:

        // Get USB information
        bool supportsUsb3 = false;
        System.Collections.ObjectModel.ReadOnlyCollection<USB.USBController> hostlist = null;
        hostlist = USB.GetHostControllers();
        mControllerCount = hostlist.Count;

        foreach (USB.USBController host in hostlist)
        {
            USB.USBController controller = new USB.USBController();
            controller.ControllerDevicePath = host.ControllerDevicePath;
            USB.USBHub roothub = controller.GetRootHub();

            System.Collections.ObjectModel.ReadOnlyCollection<USB.USBPort> portlist = null;
            portlist = roothub.GetPorts();
            foreach (USB.USBPort port in portlist)
            {
                USB.USBHub hub = port.GetHub();
                if (port.PortSpeed == USBLib.USB.USB_DEVICE_SPEED.UsbSuperSpeed.ToString())
                {
                    supportsUsb3 = true;
                    break;
                }
            }
            if (supportsUsb3)
                break;
        }
//获取USB信息
bool supportsUsb3=false;
System.Collections.ObjectModel.ReadOnlyCollection hostlist=null;
hostlist=USB.GetHostControllers();
mControllerCount=hostlist.Count;
foreach(主机列表中的USB.USBController主机)
{
USB.USBController controller=新的USB.USBController();
controller.ControllerDevicePath=host.ControllerDevicePath;
USB.USBHub roothub=controller.GetRootHub();
System.Collections.ObjectModel.ReadOnlyCollection端口列表=null;
portlist=roothub.GetPorts();
foreach(端口列表中的USB.USBPort端口)
{
USB.USBHub hub=port.GetHub();
if(port.PortSpeed==USBLib.USB.USB\u DEVICE\u SPEED.UsbSuperSpeed.ToString())
{
supportsUsb3=真;
打破
}
}
如果(支持SUSB3)
打破
}

我现在可以确定用户的PC是否有USB 3.0端口。如果它们只有2.0端口,那么我可以使用前面的代码确定是否安装了USB 3驱动程序。

USB端口不可“计数”,因为您可以使用集线器扩展它们。此外,如果没有操作系统标签,这是一个独立的答案,比如
lsubs
/
lshw
/
ls/sys/bus/usb/devices/
。请参阅或“如何确定电脑是否有USB 3端口?”-您已阅读电脑附带的手册。@sehe我认为他不想计算端口数。USB 3端口与3个USB端口不同。@H2CO3您当然是对的。尽管如此,同样的提示仍然适用于回答,尤其是关于阅读手册的回答。我对检测我的个人电脑是否有USB 3端口不感兴趣。我的软件应用程序在Win XP到Win 8上运行。它需要检测它运行的每台电脑是否都有USB 3功能。为什么要检查全速,这是USB 1.0提供的。你不应该寻找USB SuperSpeed吗?而且,这看起来不是“直接来自微软”。对不起,你的速度是对的:低=1.0,满=1.1,高=2.0,超级=3.0谷歌引导我到这个页面。代码来自USBView,这是一个Microsoft工具。如果你想下载整个应用程序,它可以在DeVoCo上使用。我很确定真正的UBVIEW示例实际上是用C++编写的,但是代码是C。而且下载的不是微软的。很有可能是某位微软工程师参与了编写,但这不是一个官方样本。
        // Get USB information
        bool supportsUsb3 = false;
        System.Collections.ObjectModel.ReadOnlyCollection<USB.USBController> hostlist = null;
        hostlist = USB.GetHostControllers();
        mControllerCount = hostlist.Count;

        foreach (USB.USBController host in hostlist)
        {
            USB.USBController controller = new USB.USBController();
            controller.ControllerDevicePath = host.ControllerDevicePath;
            USB.USBHub roothub = controller.GetRootHub();

            System.Collections.ObjectModel.ReadOnlyCollection<USB.USBPort> portlist = null;
            portlist = roothub.GetPorts();
            foreach (USB.USBPort port in portlist)
            {
                USB.USBHub hub = port.GetHub();
                if (port.PortSpeed == USBLib.USB.USB_DEVICE_SPEED.UsbSuperSpeed.ToString())
                {
                    supportsUsb3 = true;
                    break;
                }
            }
            if (supportsUsb3)
                break;
        }