none
C#でシリアルポート検出&制御の作法について RRS feed

  • 質問

  •  

    こんにちは

     

    C#でPCのシリアルポートを検出し、使用しているハードウェアを表示させ、ポートを変更できるようにしたいです。

    例: COM1 -> ABC Modem         COM2 -> N/R

    COM1の装置をCOM2ポートに換えられるとか。

     

     

    問題は:

    1、使っているポートの検出はSerialPort.GetPortNamesで実現できますが、COM1はどのハードウェアが使っているかの情報はどうやって取得できるのでしょうか?

    2、COM1をCOM2に変えたい場合どうすればいいでしょうか?

     

    よろしくお願いします。

     

    Jia Lu

    2007年9月14日 7:33

すべての返信

  • どうも

     

    1.についてはWin32 API の「GetCommProperties」でなんとかなるんじゃないでしょうか。

    2.についてはそんなことできるのか不明ですのでので後続の方に期待ですね・・・

     

    あんまり参考にはならないでしょうが、本件興味ありましたので返信いたしました。

     

    ご確認願います。

    2007年9月14日 8:15
  •  marumusisan さんからの引用

    どうも

     

    1.についてはWin32 API の「GetCommProperties」でなんとかなるんじゃないでしょうか。

     

     

    ご回答ありがとうございます。

     

    説明不足で申し訳ありません、

    例えばCOM1とかを使っているデバイス名が知りたいです。

    GetCommPropertiesを使ってみましたが、デバイス名ではなく、下記のような通信状況の構造体が戻ります。

    Code Snippet
            internal struct COMMPROP
            {
                public ushort wPacketLength;
                public ushort wPacketVersion;
                public int dwServiceMask;
                public int dwReserved1;
                public int dwMaxTxQueue;
                public int dwMaxRxQueue;
                public int dwMaxBaud;
                public int dwProvSubType;
                public int dwProvCapabilities;
                public int dwSettableParams;
                public int dwSettableBaud;
                public ushort wSettableData;
                public ushort wSettableStopParity;
                public int dwCurrentTxQueue;
                public int dwCurrentRxQueue;
                public int dwProvSpec1;
                public int dwProvSpec2;
                public char wcProvChar;
            }

     

       

    メンバ   型   意味
    wPacketLength Integer 構造体のサイズ
    wPacketVersion Integer 構造体のバージョン
    dwServiceMask Long 実装されているサービス
    dwReserved1 Long 予約
    dwMaxTxQueue Long 最大送信バッファサイズ
    dwMaxRxQueue Long 最大受信バッファサイズ
    dwMaxBaud Long 最大ボーレート
    dwProvSubType Long デバイスの種類
    dwProvCapabilities Long サポートされている機能
    dwSettableParams Long 変更可能なパラメータ
    dwSettableBaud Long 許されるボーレート
    wSettableData Integer 許されるバイトサイズ
    wSettableStopParity Integer 許されるストップビット/パリティの設定
    dwCurrentTxQueue Long 送信バッファサイズ
    dwCurrentRxQueue Long 受信バッファサイズ
    dwProvSpec1 Long プロバイダ用
    dwProvSpec2 Long
    wcProvChar(1) Integer

     

    デバイス名を取得するAPIはあるでしょうか?

    2007年9月14日 9:15
  • シリアルポートに接続するデバイスにはプラグアンドプレイの機能がないため

    デバイス名を取得することはできないと思います。

    シリアルポートにデバイスを接続した状態でWindowsのデバイスマネージャーを見ても

    デバイスが増えることはないはずです。

    2007年9月14日 13:33