USB メモリを PC に刺すと
デバイスマネージャの「ディスクドライブ」の所に
項目が表示されますが、その項目の
「プロパティ」→「詳細」タブ
で表示される内容を取得するにはどのようにすればよいでしょうか。
SetupDiGetClassDevs()
SetupDiEnumDeviceInfo()
SetupDiGetDeviceRegistryProperty()
SetupDiGetDeviceInstanceId()
辺りの関数を使って、いくつか取得はできているのですが
「バス関係」という項目をどのように取得していいのか分かりません。
その他の項目についても
一覧で取得できるような方法があれば教えてください。
OS は WindowsXP、VC は 2010Express を使っています。
よろしくお願いします。
> 一覧で取得できるような方法があれば教えてください
WMI 使えばどうだろうか? wqlというsqlの様に利用できる機能で色んな情報を取ってこ
れる。ただ、「詳細」に表示される全ての項目は一つのWMI Classから取得できる項目だ
けではなさげ。色んなWMI Classから引っ張ってきているぽい。
WMI Class一覧 > http://www.wmifun.net/library/
> 「バス関係」という項目をどのように取得していいのか分かりません。
こちらの環境では WMI Class の「Win32_DiskDrive」の「PnPDeviceID」の内容が「バス
関係」の内容と一致していた。なので「バス関係」は「Win32_DiskDrive」の
「PnPDeviceID」が表示されているのかもしれない。
# が、正直「詳細」のどの項目が何を表示しているのかを説明したドキュメントでも公開
されてないと判らん。「バス関係」とか抽象すぎて…
「PnPDeviceID」取得のソースを載せようかと思ったが70行超える分量になってしまった
ので参考になりそうなページを
http://eternalwindows.jp/windevelop/wmi/wmi02.html
上記ページで「SELECT * FROM Win32_Process WHERE Caption = 'notepad.exe'」となっ
ているとこを「SELECT * FROM Win32_DiskDrive」とでもすればいけるかと。
> デバイスマネージャの「ディスクドライブ」の所に「バス関係」
XPだと此処に表示されているが、こちらの Windows Vista、Windows7 環境だと別のとこ
ろに表示されていた(「ディスクドライブ」の「詳細」に「バス関係」項は無かった)
・USBメモリ -> 「ユニバーサル シリアル バス コントローラ」以下に存在
・内臓HDD等 -> 「IDE ATA/ATAPIコントローラ」以下に存在
gak さん、返信ありがとうございます。
恥ずかしながら WMI は全く分からないので
少し勉強してみます。
> # が、正直「詳細」のどの項目が何を表示しているのかを説明した
> ドキュメントでも公開されてないと判らん。「バス関係」とか抽象すぎて…
そうなんですよね。
やりたい事は、ドライブレターから
デバイスインスタンス ID を抽出したかったのですが
参考になるページは幾つかあっても、これと言う方法が見つからず
たまたまバス関係の値が調べられれば解決しそうだったので
質問させて頂きました。
> XPだと此処に表示されているが
結局、全く別の方法で取得はできたのですが
見つけた方法も Windows7 だとうまくいかず
いまだに試行錯誤しています。
usbdeview というツールでは欲しい情報が取得できているみたいなのですが
ソースコードが公開されてれないんですよね…。
もうちょっと調べてみます。