USB口的区分

x44348428 2009-11-26 11:10:28
1:请问同一台电脑上的两个USB口,连接了两个相同的设备。可以通过API区分开两设备分别对应得是哪个USB口吗?也就是说可以用API来得出USB口的唯一标识吗?

2:假设问题1成立。那如果我一根USB线上接了三个设备(Hid设备、Flash芯片、声卡),插到电脑上一个USB口。那这三个设备里分别都有对应此USB口的唯一标识信息吗?若有,如何用API得到呢?

谢谢!
...全文
1121 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
YFLK 2010-01-18
  • 打赏
  • 举报
回复
这时讨论的内容很吸引人,收藏!
pwlya 2010-01-08
  • 打赏
  • 举报
回复
除了顶别的做不了
-海盗旗- 2010-01-07
  • 打赏
  • 举报
回复
ding
x44348428 2010-01-07
  • 打赏
  • 举报
回复
谢谢大家。。。不知道 楼上是哪位仁兄。马甲不认识。。。
zaibianyuan 2010-01-07
  • 打赏
  • 举报
回复
杯具.............

好像是很复杂的问题............新手路过,顺便叫下JJ,搞定了记得请客.......
bjcx994 2010-01-07
  • 打赏
  • 举报
回复
杯具.............

好像是很复杂的问题............新手路过,顺便叫下JJ,搞定了记得请客.......
qinxiaoguai 2010-01-07
  • 打赏
  • 举报
回复
JJ哥哥帮你顶了,我也想学
oloveuxyz 2010-01-07
  • 打赏
  • 举报
回复
收藏并 路过 来顶顶~~~~
x44348428 2010-01-07
  • 打赏
  • 举报
回复
昨天我把图片传博客里,把链接拿过来。还是可以用。但今天不知道 为什么连我博客里的图片都被拿掉了。。。真是大杯具啊。。。
Think-In-C 2010-01-07
  • 打赏
  • 举报
回复


试着帖张图看看。。听说不能帖。
Think-In-C 2010-01-07
  • 打赏
  • 举报
回复
受用了。。。顶起。。。
liguiwen95 2010-01-07
  • 打赏
  • 举报
回复
小弟不太懂,学习中,帮顶顶!
x44348428 2010-01-06
  • 打赏
  • 举报
回复
咦?俺啥时候变两条裤衩了。。。

先贴个图吧(这Csdn发个图,忒费事了)。

Bus Hound 这个软件 可以很好的 把我的三个设备分类出来。不知道他怎么实现的。

x44348428 2010-01-06
  • 打赏
  • 举报
回复
唉。。。一个月过去了。别的搞得差不多了,又要回头来搞这个破东东了。杯具啊。。。

yubsh 兄 你说得没错,我郁闷得就是需要插N组设别,就是需要级联。
yubsh 2009-12-17
  • 打赏
  • 举报
回复
上层软件只能跟设备的驱动程序打交道,或者说,即,你的上层软件要分别使用三个设备的驱动程序来与之通讯。

尽管USB协议本身有标准,但具体厂家做设备驱动的时候却不仅相同,可能采用不同的芯片,即便采用相同的芯片,也可能有自己的DDK实现。有的实现的比较低级,比如用CREATEFILE之类的接口,有的再次封装成更高级一些的驱动。可以说,除了HID、U盘之类的通用设备可以采用系统的默认设备以外,其它设备,比如扫描仪、打印机都要安装自己的驱动程序。

与这些设备通讯,自然要了解他们的驱动程序所提供的API接口,并分别操作之。

你看一下他们的接口,是可以分开各自不同的设备的,这点毋庸置疑。

我的担心是,如果你的三个设备为一组,系统插了N组你的设备,那么级联之后,你该如何操作。呵呵,希望不是这么复杂。

skertone 2009-12-05
  • 打赏
  • 举报
回复
哈哈 "wzwcn" 同学也不算瞎掰了,因为他可能只做过 USB->COM 的设备 采用于CDC驱动或专用的USB转COM驱动

楼主是有这么一个设备 接上PC 后 枚举成三个设备? 一个HID 一个 MassStorage 一个USB 声卡?

此时你可以调用设备管理函数 枚举全部设备或仅仅 USB 类型设备 找出你需要的设备列表就行了

这些函数在 SetupApi.pas 单元中,网上很好找

例如下函数把 接在PC上的WM手机枚举出来



var
ii: Integer;
gd: TGUID;
hdi: hDevInfo;
pszText: array[0..255] of char;
DeviceInfoData: TSPDevInfoData;
begin
ii := 0;
Result := 0;
gd := StringToGUID('{4D36E972-E325-11CE-BFC1-08002BE10318}');
DeviceInfoData.cbSize := SizeOf(TSPDevInfoData);
hdi := SetupDiGetClassDevs(@gd, PChar('USB'), 0, DIGCF_PRESENT);
if (hdi <> Pointer(INVALID_HANDLE_VALUE)) then
begin
while SetupDiEnumDeviceInfo(hdi, ii, DeviceInfoData) do
begin
ConstructDeviceName(hdi, DeviceInfoData, pszText, DWord(nil));

if Pos('Mobile-based',pszText) > 0 then
begin
Result := 1;
if CheckMBDState(DeviceInfoData.DevInst) <> CM_PROB_DISABLED then
Result := 2;
end;

if Result > 0 then break;
Inc(ii);
end;
end;
SetupDiDestroyDeviceInfoList(hdi);
end;
liuhelin 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wzwcn 的回复:]
引用 2 楼 jadeluo 的回复:
引用 1 楼 wzwcn 的回复:
USB连到电脑上其实是映射成COM口的,你可以在"设备管理器"里看一下,这样连多个设备的时候每个设置就对于COM几COM几了


你真能瞎掰。

不知道你试过了没有?以前我做短信猫软件的时候就是这样的
[/Quote]
帮我看看你usb移动硬盘式com几的
liuhelin 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wzwcn 的回复:]
USB连到电脑上其实是映射成COM口的,你可以在"设备管理器"里看一下,这样连多个设备的时候每个设置就对于COM几COM几了
[/Quote]
真能扯啊,不是所有usb设备都是转com口用的
x44348428 2009-12-03
  • 打赏
  • 举报
回复
to lfchen:
不知可否具体些?万分感谢!
xiaoxian251 2009-12-03
  • 打赏
  • 举报
回复
关注
加载更多回复(24)

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧