Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找连接或未连接USB的USB集线器的特定插槽号(10个插槽)。我想得到的具体插槽没有USB连接或没有_C#_.net_Wmi - Fatal编程技术网

C# 查找连接或未连接USB的USB集线器的特定插槽号(10个插槽)。我想得到的具体插槽没有USB连接或没有

C# 查找连接或未连接USB的USB集线器的特定插槽号(10个插槽)。我想得到的具体插槽没有USB连接或没有,c#,.net,wmi,C#,.net,Wmi,我有一个10个USB插槽的USB集线器连接到我的USB端口。我想将USB设备连接到特定端口示例:两个USB连接在插槽3和插槽7处。所以,我想要一个列表,显示插槽3和插槽7有USB,其余插槽为空 我尝试过使用WMI查询Win32_USBHub。但这里我只得到6个设备ID,而不是10个。我使用设备ID的公共VID区分端口 但即使在将USB连接到特定端口后仍然如此。我想得到它们与USBHub连接的对应插槽 我无法识别USB连接的插槽以及插槽为空的位置 ManagementObjectCollectio

我有一个10个USB插槽的USB集线器连接到我的USB端口。我想将USB设备连接到特定端口
示例:两个USB连接在插槽3和插槽7处。所以,我想要一个列表,显示插槽3和插槽7有USB,其余插槽为空

我尝试过使用WMI查询Win32_USBHub。但这里我只得到6个设备ID,而不是10个。我使用设备ID的公共VID区分端口

但即使在将USB连接到特定端口后仍然如此。我想得到它们与USBHub连接的对应插槽

我无法识别USB连接的插槽以及插槽为空的位置

ManagementObjectCollection collection;
var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub");
collection = searcher.Get();

我会尝试从USB设备中提取
位置信息
(与设备管理器中相同)。。。我不在C#WMI中编写代码,但您应该能够通过
setupapi.h
获取此类信息,它是winapi的一部分(我想),我在C++/VCL中就是这样做的:

#包括
bool USBinfo()
{
inti,n;
AnsiString s,txt=“”;
DWORD dwSize,dwPropertyRegDataType;
HDEVINFO HDEVINFO;
SP_设备信息_数据设备信息数据;
TCHAR szDesc[1024];
//列出所有连接的USB设备
hDevInfo=SetupDiGetClassDevs(NULL,文本(“USB”),NULL,DIGCF_-PRESENT | DIGCF_-ALLCLASSES);
if(hDevInfo==无效的句柄值)返回false;
对于(i=0;i++)
{
DeviceInfo.cbSize=sizeof(DeviceInfo数据);
如果(!SetupDiEnumDeviceInfo(hdeInfo、i和DeviceInfo数据))中断;
SetupDiGetDeviceRegistrProperty(hdeInfo和DeviceInfo数据、SPDRP_DEVICEDESC和dwPropertyRegDataType,(字节*)szDesc、sizeof(szDesc)和dwSize);
s=szDesc;n=48;while(s.Length()n)s=s.SubString(1,n);txt+=s+“”;//这只是设置常量字符串大小以将列全部标记为n个字符
SetupDiGetDeviceRegistrProperty(hdeInfo和DeviceInfo数据、SPDRP_硬件ID和dwPropertyRegDataType,(字节*)szDesc、sizeof(szDesc)和dwSize);
s=szDesc;如果(s==“USB\\VID_???和PID_???REV_???”)
{
//在这里,你可以为特定的视频,PID做定制,只需将上面一行中的???更改为你的特定视频,PID,REV
}
s=szDesc;n=64;而(s.Length()n)s=s.SubString(1,n);txt+=s+“”;
SetupDiGetDeviceRegistrProperty(hdeInfo和DeviceInfo数据、SPDRP\u位置信息和dwPropertyRegDataType,(字节*)szDesc、sizeof(szDesc)和dwSize);
s=szDesc;n=64;而(s.Length()n)s=s.SubString(1,n);txt+=s+“”;
txt+=“\r\n”;
}
Main->mm_log->line->Add(txt);//这只是将txt字符串输出到memo
返回true;
}
这里是我机器上的输出:

USB Root Hub                                     USB\ROOT_HUB&VID1022&PID7807&REV0011                             USB\ROOT_HUB&VID1022&PID7807&REV0011                             
USB Root Hub                                     USB\ROOT_HUB&VID1022&PID7807&REV0011                             USB\ROOT_HUB&VID1022&PID7807&REV0011                             
USB Root Hub                                     USB\ROOT_HUB&VID1022&PID7809&REV0011                             USB\ROOT_HUB&VID1022&PID7809&REV0011                             
USB Root Hub                                     USB\ROOT_HUB20&VID1022&PID7808&REV0011                           USB\ROOT_HUB20&VID1022&PID7808&REV0011                           
USB Root Hub                                     USB\ROOT_HUB20&VID1022&PID7808&REV0011                           USB\ROOT_HUB20&VID1022&PID7808&REV0011                           
USB Composite Device                             USB\VID_048D&PID_9006&REV_0200                                   Port_#0001.Hub_#0004                                             
IT9135 BDA Device                                USB\VID_048D&PID_9006&REV_0200&MI_00                             0000.0013.0002.001.000.000.000.000.000                           
USB Input Device                                 USB\VID_048D&PID_9006&REV_0200&MI_01                             0000.0013.0002.001.000.000.000.000.000                           
Canon LiDE 30                                    USB\VID_04A9&PID_220E&REV_0100                                   Port_#0005.Hub_#0001                                             
American Power Conversion USB UPS                USB\VID_051D&PID_0002&REV_0106                                   Port_#0001.Hub_#0001                                             
USB Input Device                                 USB\Vid_093A&Pid_2510&Rev_0100                                   USB Optical Mouse                                                
USB Input Device                                 USB\VID_413C&PID_2107&REV_0115                                   Port_#0002.Hub_#0001                                             
如您所见,最后一列(第3列)包含您想要的信息。查看
setupapi.h
中可以使用的所有
SPDRP\uu
定义。。。从VCL使用的唯一东西是
AnsiString
,因此将其更改为您可以使用的任何字符串类型

这不限于USB。如果需要所有设备,请将
TEXT(“USB”)
search参数更改为
NULL

hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_PRESENT|DIGCF_ALLCLASSES);

我会尝试从USB设备中提取
位置信息
(与设备管理器中相同)。。。我不在C#WMI中编写代码,但您应该能够通过
setupapi.h
获取此类信息,它是winapi的一部分(我想),我在C++/VCL中就是这样做的:

#包括
bool USBinfo()
{
inti,n;
AnsiString s,txt=“”;
DWORD dwSize,dwPropertyRegDataType;
HDEVINFO HDEVINFO;
SP_设备信息_数据设备信息数据;
TCHAR szDesc[1024];
//列出所有连接的USB设备
hDevInfo=SetupDiGetClassDevs(NULL,文本(“USB”),NULL,DIGCF_-PRESENT | DIGCF_-ALLCLASSES);
if(hDevInfo==无效的句柄值)返回false;
对于(i=0;i++)
{
DeviceInfo.cbSize=sizeof(DeviceInfo数据);
如果(!SetupDiEnumDeviceInfo(hdeInfo、i和DeviceInfo数据))中断;
SetupDiGetDeviceRegistrProperty(hdeInfo和DeviceInfo数据、SPDRP_DEVICEDESC和dwPropertyRegDataType,(字节*)szDesc、sizeof(szDesc)和dwSize);
s=szDesc;n=48;while(s.Length()n)s=s.SubString(1,n);txt+=s+“”;//这只是设置常量字符串大小以将列全部标记为n个字符
SetupDiGetDeviceRegistrProperty(hdeInfo和DeviceInfo数据、SPDRP_硬件ID和dwPropertyRegDataType,(字节*)szDesc、sizeof(szDesc)和dwSize);
s=szDesc;如果(s==“USB\\VID_???和PID_???REV_???”)
{
//在这里,你可以为特定的视频,PID做定制,只需将上面一行中的???更改为你的特定视频,PID,REV
}
s=szDesc;n=64;而(s.Length()n)s=s.SubString(1,n);txt+=s+“”;
SetupDiGetDeviceRegistrProperty(hdeInfo和DeviceInfo数据、SPDRP\u位置信息和dwPropertyRegDataType,(字节*)szDesc、sizeof(szDesc)和dwSize);
s=szDesc;n=64;而(s.Length()n)s=s.SubString(1,n);txt+=s+“”;
txt+=“\r\n”;
}
Main->mm_log->line->Add(txt);//这只是将txt字符串输出到memo
返回true;
}
这里是我机器上的输出:

USB Root Hub                                     USB\ROOT_HUB&VID1022&PID7807&REV0011                             USB\ROOT_HUB&VID1022&PID7807&REV0011                             
USB Root Hub                                     USB\ROOT_HUB&VID1022&PID7807&REV0011                             USB\ROOT_HUB&VID1022&PID7807&REV0011                             
USB Root Hub                                     USB\ROOT_HUB&VID1022&PID7809&REV0011                             USB\ROOT_HUB&VID1022&PID7809&REV0011                             
USB Root Hub                                     USB\ROOT_HUB20&VID1022&PID7808&REV0011                           USB\ROOT_HUB20&VID1022&PID7808&REV0011                           
USB Root Hub                                     USB\ROOT_HUB20&VID1022&PID7808&REV0011                           USB\ROOT_HUB20&VID1022&PID7808&REV0011                           
USB Composite Device                             USB\VID_048D&PID_9006&REV_0200                                   Port_#0001.Hub_#0004                                             
IT9135 BDA Device                                USB\VID_048D&PID_9006&REV_0200&MI_00                             0000.0013.0002.001.000.000.000.000.000                           
USB Input Device                                 USB\VID_048D&PID_9006&REV_0200&MI_01                             0000.0013.0002.001.000.000.000.000.000                           
Canon LiDE 30                                    USB\VID_04A9&PID_220E&REV_0100                                   Port_#0005.Hub_#0001                                             
American Power Conversion USB UPS                USB\VID_051D&PID_0002&REV_0106                                   Port_#0001.Hub_#0001                                             
USB Input Device                                 USB\Vid_093A&Pid_2510&Rev_0100                                   USB Optical Mouse                                                
USB Input Device                                 USB\VID_413C&PID_2107&REV_0115                                   Port_#0002.Hub_#0001                                             
如您所见,最后一列(第3列)包含您想要的信息。查看
setupapi.h
中可以使用的所有
SPDRP\uu
定义。。。从VCL使用的唯一东西是
AnsiString
,因此将其更改为您可以使用的任何字符串类型

这不限于USB。如果需要所有设备,请将
TEXT(“USB”)
search参数更改为
NULL

hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_PRESENT|DIGCF_ALLCLASSES);
static int GetPhysicalPort()
{
尝试
{
设备=新列表();
管理对象收集;
U