首页 文章

如何在Mac OS cocoa中获取已安装的USB设备的设备ID,供应商ID和产品ID

提问于
浏览
3

我正在尝试编写一个Cocoa程序来检测连接到Mac OS的iPod . 我正在收听NSWorkspaceDidMountNotification和NSWorkspaceDidUnmountNotification以获取USB设备的安装和卸载通知 . 我可以使用NSString * path = [[notif userInfo] objectForKey:@“NSDevicePath”]获取已安装设备的设备路径;但我也不需要知道设备ID,供应商ID,产品ID等,以检查安装的设备是否是iPod . 我认为前进的方向是IOKit . 但我觉得它适用于低级编程 . 有没有其他方法可以找到这些?另外,如果是IO套件,是否有任何示例程序在我提供安装路径时会给出ID?

非常感谢 .

3 回答

  • 0

    我正在收听NSWorkspaceDidMountNotification和NSWorkspaceDidUnmountNotification以获取USB设备的安装和卸载通知 .

    这不是那些通知的用途 . 它们是卷装入和卸载通知,卷可以来自非USB设备 . 磁盘映像,FireWire设备,光盘和闪存卡都是非USB设备的设备 . (该卡可能位于USB读卡器中,但该卡不是读卡器 . )

    我认为前进的方向是IOKit .

    正确 .

    但我觉得它适用于低级编程 .

    正确 .

    还有其他方法可以找到这些吗?

    您不能完全切断I / O Kit,但有一个快捷方式可以为您节省一些工作 . 这是磁盘仲裁框架 .

    Register a disk-appeared callbacka disk-disappeared callback . 您实现的每个回调函数都需要 DADiskRef . 您可以将其传递给the DADiskCopyIOMedia function以获取磁盘的I / O Kit介质对象的服务端口 .

    我不知道该怎么办,除了您需要按照该文档中的描述释放服务端口 . 此外,您仍然需要过滤掉非USB设备,但至少您将拥有I / O Kit媒体对象来执行此操作 .

    另一件事:此解决方案以及您当前正在使用的NSWorkspace通知,如果iPod未设置为使用或不支持磁盘模式,则可能两者都不起作用 . iPhone和iPod touch是目前最大的例子 . 如果是这种情况,那么您将不得不从头到尾使用I / O Kit - DiskArb和NSWorkspace都不会为您完成任务 .

  • 0

    还有来自Apple的HIDUtilites样本 . 阅读 Headers - 同时's not great documentation for this framework, I think there'是一个示例应用程序或其中的东西 .

  • 2

    你可以使用usbprobe,ioregistryexplorer或者如果你只想要idProduct和...你可以随时将它插入linux机器并使用“lsusb -v”以非常理智的方式获取有关设备的信息,而不是ioregistryexplorer每次发布os x时都会不断打破 .

    ioregistryexplorer还要求山狮的mac开发者计划的100美元会员资格

相关问题