2011-09-09 11 views
4

私は4つのUSBシリアルコンバータ(Prolific)をUSBハブに接続しました。デバイスマネージャーを見ると、動的に割り当てられたCom番号が表示されます。しかし、ハブを別のUSBポートに再接続した後、またはシステムの再起動後に、それらのCOM番号が時々変更されることがあります。これらの数値を手動で検索することなく、すべてのコンバータの数値を更新する方法はありますか?基本的には、私のC#プロジェクトでは、すべてのコンバータの一意のIDを探して新しいCOM番号を取得するメソッドを用意したいと思います。これを行う方法はありますか(いくつかのwmiクエリを試しましたが、成功しませんでした)?USBシリアルコンバータを区別するにはどうすればいいですか?

今日、私は回避策について考えました。だから別の質問がある。どのようにUSBハブについての情報を取得するには?基本的に私は何とか自分のUSBハブを見つけて、ハブポートデバイスに接続された情報を取得することができました。これらのデバイスのCOM番号を取得することは、wmiクエリーを通じて非常に簡単です。私はUSBViewを使用して、そのような情報を得ることが可能であることを確認しました。私は、ルートハブ - >汎用USBハブ - >広範なUSB - シリアル通信ポートから木が立ち上がっているのを見ることができますが、今すぐコードでそれを行う方法を知ることができます。何か案は?

+1

このリンクを探すために

いいえ、USBは、ポート番号が表示されません、バスです。そして、はい、あなたがテストしているときに痛い問題です(生産中ではありません)。あなたのコードでSerialPort.GetPortNames()を観察することはできません。デバイスデータから物理デバイスを識別する方法があれば、最適なソリューションです。 –

+0

私は多くの詳細は覚えていませんが、作成された各ポートには関連するレジストリキーがあります(場所はUSBシリアルチップの製造元によって異なります)。 –

+1

この問題を避けるため、Moxa 8ポートPCIシリアルカードを使用するように切り替えました。 –

答えて

1

そのシンプルな、のWin32ネイティブを使用して、使用

var guidComPorts = Guid.Empty; 
     UInt32 dwSize; 
     IntPtr hDeviceInfo; 
     var buffer = new byte[512]; 
     var providerName = new[] { }; 
     var spddDeviceInfo = new SpDevinfoData(); 
     var bStatus = SetupDiClassGuidsFromName("Ports", ref guidComPorts, 1, out dwSize); 
     if (bStatus) 
     { 
      hDeviceInfo = SetupDiGetClassDevs(
       ref guidComPorts, 
       (IntPtr)null, 
       (IntPtr)null, 
       DigcfPresent | DigcfProfile); 
      if (hDeviceInfo.ToInt32() != 0) 
      { 

       while (true) 
       { 
        spddDeviceInfo.CbSize = Marshal.SizeOf(spddDeviceInfo);// IS IT THIS LINE WORK FOR 64 BIT       
        bStatus = SetupDiEnumDeviceInfo(hDeviceInfo, nDevice++, ref spddDeviceInfo); 
        break; 
       } 

      } 


      return; 
     } 

    } 

、あなたを助けるために、私は、コードの一部を提供する

、あなたが得ることができる呼び出して、このコード...

検索友好的な名前、分割文字列あなたが探している正確なポートを取得します。 私はそれを完了しました、いくつかの機密性の理由でここで完全なコードを提供することはできません。もっと

http://www.codeproject.com/KB/cs/HardwareHelper.aspx

+0

http://stackoverflow.com/questions/5865487/is-it-capable-to-run-on-64bit-platform –

+0

返信いただきありがとうございます。 @arun私はwin32のAPIコールを使用し、ネット上で見つけたUSBViewのC#コードに基づいています。それは私がwin32 API(サンプルが動機付けされていました;かなりのコードがたくさんありましたが、今のところうまくいきました。 – Falander

関連する問題