函数midiOutGetDevCaps返回一个结构 MIDIOUTCAPS。 在 Windows XP 上查询 USB MIDI 设备时,我需要更具体的信息,特别是在使用设备管理器打开相应设备时,我需要显示在“位置”下的信息。 我需要此信息以便以编程方式区分连接到计算机的多个 MIDI 接口(interface)。使用midiOutGetDevCaps,我为连接到计算机的每个midi usb接口(interface)统一获取“USB Audio Device”,因此无法区分接口(interface)。 更糟糕的是,这个字符串是本地化的,所以例如在德语 Windows 上,您将获得“USB Audiogerät”而不是“USB Audio Device”。
最佳答案
我想这取决于你有多绝望。我自己也试过使用 USB 设备。在我的例子中,我需要枚举某些与 USB COM 端口相关的设备。 . .无论它们当前是否连接到系统。
这都是公司专有代码,抱歉我不能发布,但是搜索有关 USB 相关设备的所有信息从这里开始(Perl):
$hostnamePrefix = "//$hostname/";
my $baseKey = "${hostnamePrefix}HKEY_LOCAL_MACHINE/System/CurrentControlSet/";
my $regVidList = Win32::TieRegistry->new("${baseKey}Enum/USB/", $optionsRef);
如果没记错的话,这是一个相当简单的结构。我相信您实际上必须遍历注册表的两个独立部分才能获得所需的一切。 . .如果您迫不及待地尝试这样做,我很乐意尽可能回答问题,但发布代码需要我们法律部门的批准。 (并非不可能,但需要数周时间才能获得。)
此外,虽然这将适用于 XP。 . .我不知道它将如何在 Win7 上运行。 (我不知道哪种方式,据我所知还没有人尝试过。)
编写代码并没有那么糟糕(生成的 Perl 脚本大约有 1000 行代码,几乎 50% 是注释),但是找出键和特殊情况之间的所有关系需要几天时间。
关于windows - 在 windows xp 上检索详细的 usb midi 设备信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555987/