シリアルポートの一覧を常に表示するソフトを作りました(オープンソース)
コトの発端
ArduinoとかUSBシリアルアダプタみたいなシリアル通信デバイスを仕事や趣味で使っています.その手のデバイスと連携するPC側のプログラムを書いている時に,「あれ? いまCOM何番にデバイス繋がってるんだっけ?」となることが頻繁にあります.デバイスマネージャを開いて確認すればいいのですが,これが意外と面倒です.
作ったもの
というわけで,色々と捗らせるためにシリアルポートの一覧を常に表示しておいてくれるソフトを作りました.デバイスを抜き差ししたら自動的に表示が更新されるようになっています.また,便利な「常に前面に表示」の機能もあります.
- 配布ページはこちら
本当はPC側のプログラムにこういう列挙機能を組み込むべきなんですが,プロトタイピング段階だとそういうのが面倒になって,やっつけでじかにCOM番号を書いちゃうことはままあります.そういうときに便利な道具です(完全に俺得ですが).
参考資料
製作にあたり参考にしたのは以下のWebサイトです.デバイスの列挙,デバイスの抜き差し検知,常時フォアグランド表示,ダイアログベースでESCで終了させない方法など,個別に充実した情報が得られたので作業としてはほとんどコピペプログラミングでした.
- VC++でシリアルポートの情報を取得:眠戌の手記:So-netブログ
- USBフラッシュメモリの挿入を検知する - 赤羽橋日記
- http://www.gentoo.jp/~isao/vc/tipstext.html
- CWnd::SetWindowPos (MFC)
- 覚え書き:VC++のダイアログベースアプリで、Enter/Esc押下でアプリを終了させない方 | A7Mの日記 | スラド
1点だけ躓いたのが,SetupDiGetClassDevs()でデバイスを列挙する時に&GUID_DEVINTERFACE_COMPORTを指定するとArduino Unoが検出されないということ.これに関しては全デバイスを列挙して,分類がPortsになっているものだけを取得することで回避しました.また,無効化しているデバイスも検出されてしまうので,有効・無効の状態チェックも必要です.その辺の情報は以下.