VB6で有効なポートを調べるには?

解決


たくろう  2009-10-22 16:35:34  No: 102033  IP: 192.*.*.*

お世話になります。

VB6でシリアル通信を使ったプログラムを作成しようと思っています。
使用するPCの有効なCOMポートを調べて、コンボボックスに
リストを加えるようなものが出来ればいいと考えています。

調べてみても、いまいちわかりませんでしたのでよろしくお願いいたします。

編集 削除
オショウ  2009-10-22 18:09:55  No: 102034  IP: 192.*.*.*

いろいろありますが、最終的な結論として・・・
本体ポートは列挙できても、拡張ボードやPCMCIAカード
USBアダプタ等でのシリアル通信アダプタは、列挙されない
場合があります。

機器のメーカーのドライバーが正しくレジストリにも登録しな
いのが原因なのですが・・・

一般的には・・・
http://blogs.yahoo.co.jp/sirius_cma1/2519308.html

こんなところでしょうか・・・

以上。参考まで

編集 削除
たくろう  2009-10-22 20:57:37  No: 102035  IP: 192.*.*.*

オショウ様、ご回答ありがとうございます。
ご紹介いただいたサイトを参考に作成してみます。

編集 削除
たくろう  2009-10-26 12:52:51  No: 102036  IP: 192.*.*.*

ご紹介いただいたサイトを参考に機能実現できました。

しかし、下記の疑問が出ましたのでよろしくお願いします。

サンプルでは、WMIというものを使ってUSB変換も取得できるようです。
得られる結果が、文字列("通信ポート (COM1) 通信ポート (COM2)")と
なりますが、こちらを数値(1,2)で取得したいと思います。

WMIというものの話になってしまうのかもしれませんが
文字列を加工するのではなく、ポート番号を取得する方法があれば
よろしくお願いいたします。

編集 削除
しんご  2009-10-26 19:19:42  No: 102037  IP: 192.*.*.*

Win32_SerialPort を使うと、シリアルポートに関する
パラメータを取得できるようです。

ttp://www.anchorsystems.jp/anchor/ashp/netmon/samples/wmi_hard.html#Win32_SerialPort.htm

上記サイトはVB6用には書かれていませんので、
適宜変換してください。

実際にプログラムを組んでみましたが、
ポート番号を数値で得ることはできませんでした。
"通信ポート (COM1)"以外にも、"COM1"などの情報は得られましたが・・・

コマンドプロンプトから mode と打ってみても
ポート番号を数値で得られないように、無理なのではないでしょうか?
デバイスマネージャでみても、ポート番号は書かれておりませんし、、

ちなみにデバイスマネージャにおいて、COMポート番号割当は
「COM1」のように記述して割当てるようです。(WinXP のお話)

"COM1"などの文字列情報から、数値部分のみを抽出する方法で
ダメなのですか?

編集 削除
たくろう  2009-10-27 10:17:53  No: 102038  IP: 192.*.*.*

しんご様、ご回答ありがとうございます。

ご紹介いただいたサイトを参考にして

objItem.DeviceID

という記述をすれば"COM1"といった情報が得られました。
今回の理想に一番近かったので、これで進めます。

ご回答いただいた方々、ありがとう御座いました。

編集 削除