none
PCに接続した機器が何番のCOMになっているかを取得する方法 RRS feed

  • 質問

  • こんにちは。
    VC++6.0を使ってアプリを開発しているのですが、
    PCに接続した機器が何番のCOMになっているかを取得する方法がわからず困っています。
    たとえば、「ABC01」という機器が何番のCOMになっているかを取得したいのです。
    レジストリを検索すれば良いのかなと思い色々調べているのですが
    判りません。
    よろしくお願い致します。

    2006年6月25日 6:41

すべての返信

  • ほとんどのCOMを使って接続を行うようなソフトは、COMの番号を設定ファイルや
    設定画面から指定するような形になっていると思うんですが、逆に調べる事が可能なんでしょうか?
    私の認識ではそれが難しい、または実装しても実用に耐えないと言うような話があるので
    今のインターフェイスになっているのだと思っていました。
    直ぐ思い付くのは考えうる全てのCOMに対してセンスしてみるくらいでしょうか。
    特定のセンスでそれが目的の機器であると言う判別が可能な返却値が得られるのであれば、
    それで可能な気はしますけれど、接続されていないCOMだとタイムアウトまで帰ってきそうに無いので
    たどり着くまで時間が掛かりそうですね。
    レジストリの検索等でわかるのであれば、私も知りたいです。

    2006年6月26日 2:50
  •  PATIO さんからの引用

    レジストリの検索等でわかるのであれば、私も知りたいです。

    HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

    を調べれば、有効なCOMポートの一覧は取得できます。

    2006年6月27日 0:34
  •  k_kazu さんからの引用

    HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

    を調べれば、有効なCOMポートの一覧は取得できます。


     返信ありがとうございます。
    なんか横槍して回答もらったような形になってますが、
    有効なCOMの一覧がわかれば、後は一つずつセンスするしかないですかねぇ。
    レジストリ上に何が接続されているかまで書いてあればわかりますけどね。
    参考にさせていただきます。

    2006年6月27日 2:52
  • COM番号がフローティングになっているとアプリ側で検出するかオペレータに教えて貰うしかありません。
    そこでフローティングをやめて固定化するという手はどうでしょうか?

    1. 目的のCOMが使える状態でデバイスマネージャを開く
    2. ツリーの[ポート(COMとLPT)]を展開
    3. 目的のCOMポートが(COM?)等と表示されているはずなので、これのプロパティーを開く
    4. [ポートの設定]タブの[詳細設定]ボタンを押す
    5. 詳細設定ダイアログの下方に[COMポート番号]があるので、いつも割り当てるポートをココで決定
      ※デフォルトのままでも良いが、例えばCOM10に割り当てるとする

    上記をやっておけばいつもCOM10をオープンすればOKだと思いますよ。
    そしてアプリケーションとしては「環境設定」ダイアログを設けてポートを変更・保存出来るようにしておくのがベストだと思います。

    特定のコマンドに対して機器ABC01が特定の識別コードを送り返してくるという前提であればCOM1からCOM256まで全てを順次オープンして特定のデータを送信/受信して調べられると思いますが、「ABC01」以外の機器には「意味不明なコマンド」でしかないため、他機器の誤動作を避けるためにもこの全ドアノック式だけはやめた方がよいと思います。
    ※しないと思いますが念のため

    2006年7月3日 12:44
  • みなさま

    アドバイス本当にありがとうございます。

    ZZOさんにご教示いただいた内容でtryしてみようと思います。

    本当に有難うございました。

    2006年7月5日 10:26