タイトル : Re: プラグアンドプレイでポートの開放、切断をしたい 投稿日 : 2010/06/03(Thu) 21:50 投稿者 : K.J.K.
> このコードを理解しつつうまくプラグアンドプレイを認識させるよう努力します。 動くかどうかは確認していません。ですから、まだ結論を出すのは早すぎます。 まず提示したコードですが、こちらの環境下では XP 以降で使える機能を 利用するようにしています。というのも提示した GUID: GUID_DEVINTERFACE_USB_DEVICE では RegisterDeviceNotification の呼び出しに失敗したからです。 これで上手く行く環境ならばそれでもいいのですが、失敗した場合には どこを換えていくのかも考えないといけません。 まず、上記コードでうまく行った場合は、USB デバイスを抜き差しすると発生する イベントの DeviceArrival や DeviceRemoveComplete の発生回数が増えます。 おそらくそのときは、イベントプロシージャの第一引数の DeviceType が 5 に なっていると思います。これが USB デバイスそのものの抜き差しをあらわします。 しかし上手く行かない場合もあり得ます。API関数の RegisterDeviceNotification の戻り値が 0 の場合です。こうなると別の GUID を探して指定しなければなりません。 目視で探すのであれば、regedit を起動して、 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB より2段階下のキーを一つずつ調べて、該当すると思われるデバイスを "DeviceDisc" フィールドから探して、それらしいものが見つかったらそのときの "ClassGUID" の値を 記録し、その GUID を With uFilter.GUID 以下で指定してください。 |