4

Mac OS に接続された iPod を検出する Cocoa プログラムを作成しようとしています。USB デバイスのマウントおよびアンマウント通知について、NSWorkspaceDidMountNotification および NSWorkspaceDidUnmountNotification をリッスンしています。NSString *path = [[notif userInfo] objectForKey:@"NSDevicePath"]; を使用して、マウントされたデバイスのデバイス パスを取得できます。しかし、マウントされたデバイスが iPod であるかどうかを確認するには、デバイス ID、ベンダー ID、製品 ID なども知る必要があります。進むべき道はIOKitだと思います。しかし、私はそれが低レベルのプログラミング用だと感じています。これらを見つける他の方法はありますか?また、IO キットの場合、マウント パスを指定すると ID が返されるサンプル プログラムはありますか?

どうもありがとう。

4

4 に答える 4

2

USBデバイスのマウントとアンマウントの通知についてNSWorkspaceDidMountNotificationとNSWorkspaceDidUnmountNotificationをリッスンしています。

それはそれらの通知の目的ではありません。これらはボリュームのマウントとアンマウントの通知であり、ボリュームはUSBデバイスではないものから取得できます。ディスクイメージ、FireWireデバイス、光ディスク、およびフラッシュメモリカードはすべて、USBデバイスではないデバイスです。(カードはUSBカードリーダーにある可能性がありますが、カードはリーダーではありません。)

今後はIOKitだと思います。

正しい。

しかし、私はそれが低レベルのプログラミングのためであると感じています。

正しい。

これらを見つける他の方法はありますか?

I / Oキットを完全に切り出すことはできませんが、作業を節約できるショートカットがあります。これは、ディスクアービトレーションフレームワークです。

ディスクが表示されたコールバックとディスクが表示されなかったコールバックを登録します。実装する各コールバック関数は、を取りますDADiskRef。これを関数に渡してDADiskCopyIOMediaディスクのI/OKitメディアオブジェクトへのサービスポートを取得できます。

そのドキュメントで説明されているようにサービスポートを解放する必要があることを除いて、私はそのとき何をすべきかわかりません。また、USB以外のデバイスを除外する必要がありますが、少なくともI/OKitメディアオブジェクトを使用する必要があります。

もう1つ:このソリューションと現在使用しているNSWorkspace通知は、iPodがディスクモードを使用するように設定されていないか、サポートされていない場合、おそらく両方とも機能しません。iPhoneとiPodtouchは、現在の最大の例です。その場合は、最初から最後までI / Oキットを使用する必要があります。DiskArbもNSWorkspaceも、その役割を果たしません。

于 2010-01-07T15:19:12.407 に答える
0

Apple のHIDUtilitesサンプルもあります。ヘッダーを読んでください。このフレームワークに関する優れたドキュメントはありませんが、サンプル アプリか何かがあると思います。

于 2010-01-18T15:48:42.910 に答える
0

usbprobe、ioregistryexplorer を使用するか、単に idProduct が必要な場合は、いつでも Linux マシンにプラグインし、"lsusb -v" を使用してデバイスに関する情報を取得できます。 os x のリリースごとに常に中断します。

ioregistryexplorer には、マウンテン ライオンの時点で 100 ドルの mac 開発者プログラムのメンバーシップも必要です

于 2013-01-20T08:12:03.140 に答える