2011-12-24 9 views
2

私は、USBポートにバイトを送信することによって通信するアプリケーションを書いています。ユーザーがポートを選択してそれを行うことを許可したいのですが、私はSerialPort.GetPortNames()を使用します。残念ながら、空の配列を返します。このメソッドはデータのレジストリ(HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM)を読み込んでいますが、SERIALCOMMディレクトリがありません。 Linuxでプログラムを実行すると、4つのUSBポートが期待通りに表示されます。レジストリを修正したり、ポートを別の方法で発見するにはどうすればいいですか?Cでシリアルポートを発見する

+0

単純な説明は、マシンにはシリアルポートがないという単純な説明だけです。すべてのUSBデバイスドライバがシリアルポートをエミュレートするわけではありません。または、ドライバが正しくインストールされていないデバイスがある可能性があります。コントロールパネル+デバイスマネージャで再確認できます。 –

答えて

1

SerialPort.GetPortNames()は、シリアルポートを検出する正しい方法です。しかし、Windows 7を使用している場合は、このメソッドのリストにあるレジストリキーのアクセス許可に問題があると思います。私はMicrosoft.comでこの問題を説明する投稿を見つけました。

+0

私は実際にWindows 7を使用しています。しかし、私は管理者としてregeditを開くと、私はまだディレクトリが表示されません。 –

+0

また、ソリューションは空のディレクトリを作成します。 –

1

SerialPort.GetPortNames()は、USBポートではなく、マシンにインストールされているCOMポートの一覧を返します。私は、WindowsはUSBポートのリストを提供するとは考えていないが、使用可能なUSBデバイスのみが提供されていると思う。

「ユニバーサルシリアルバス」という名前にもかかわらず、それらは慣習的な意味で「シリアルポート」ではありません。

1

管理オブジェクトを使用して、使用可能なCOMポートを照会することができます。興味深いのテーブルは以下のとおりです。ルートに

にあなたはWMI Code Creatorでこれらの名前空間を探索し、VBScriptを生成することができます/ VB/C#コード。

関連する問題