ることができます。
このリストの問い合わせに使用される関数が、SetupDiGetClassDevs()です。
この関数は、"setupapi.dll"に入っています。
関数の宣言は、"DeviceManagementDeclarations.vb"を見てください。
この関数は、HIDクラス・デバイスにたどり着くための鍵のリストを返します。
STEP3 : 鍵からパス名を割り出せ
出来上がったリストから、アプリケーションが操作しようとしているデバイスを割り出さなくてはならないのですが、鍵にはデバイスを割り出すための詳細な情報は含まれていません。
このため、デバイスを特定する名前である「パス名」のリストに変換します。
パス名を求めるためには、関数SetupDiEnumDeviceInterfaces()とSetupDiGetDeviceInterfaceDetail()を使用します。
まず、SetupDiEnumDeviceInterfaces()でインターフェースを示す構造体を構築します。
そして、SetupDiGetDeviceInterfaceDetail()でその詳細なデータを引き出します。
何で、こんな二段構成になっているのかは、理解できません。
SetupDiGetDeviceInterfaceDetail()は、二回呼び出されます。
一回目は、得られるデータの大きさを調べるために呼び出されます。
そして、二回目は、あらかじめ十分な大きさの領域を確保して、そこにデータを書かせます。
領域を確保するには、ヒープ領域が便利です。
ヒープに書かせたデータをVisual BASICのStringにコピーしたら、ヒープは開放されます。
Visual BASICでヒープを割り当てる
Cの場合、ヒープを割り当てるためには、"malloc()"のような関数が使用されました。
ところが、ちょっと前のVisual BASICの場合、もともとヒープのような概念がないため、
何とか誤魔化すしか方法がありませんでした。
現在のVisual BASICは、かなりCに歩み寄っているようで、"Marshal.AllocHGlobal()"という関数(メソッド?)が提供されています。
長くなったので、続く…