• 締切済み

COMポートが存在するかどうかを調べるには?

Windows APIでプログラムしています。 とあるCOMポートが存在するかどうかをチェックしたいと思っています。今まではCreateFile関数でポートを開いてみて、INVALID_HANDLEを返したらポートは存在しないというロジックを使っていたのですが、すでにポートが開いている状態でCreateFileを再び使うとINVALID_HANDLEを返してしまうので、ポートは存在するのに「存在しない」という判定になってしまうトラブルが起きました。 他の方法でポートの存在を確認する方法はありますか?

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1416)
回答No.1

回答ではありません。 CreateFileが失敗した後、GetLastErrorでエラーコードを調べてください。 「存在するが使えない」と「存在しないから使えない」ではコードが違うのでは?

BearCave
質問者

お礼

GetLastErrorで調べたところ、確かに違うエラーコードを返しているのが確認できました。ポートは存在するけどすでに開かれていて使えない場合は「ACCESS_DENINED」というエラーを返すので、これをチェックすることでポートの有無を判断できました。アドバイスありがとうございました。 またネットで色々調べてみたところ、レジストリの「HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM」というキー内に、存在するポートがすべて列挙されているということが分かりました。(Windows2000/XP以降のみ有効)同じ疑問を持った方は参考にしてください。

関連するQ&A