1


0

DelphiでのシステムのCOMポートの一覧を列挙する

目的: Delphiのシステムで利用可能なCOMポートを一覧表示できるようにしたいです。

*宿題:*私はhttps://stackoverflow.com/questions/374200/finding-available-lpt-parallel-ports-and-addresses-in-delphiを使用してシステムのLPTポートを列挙する上でこのスレッドを読みました。レジストリ COMポートがレジストリの `+ HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM +`にリストされていることもわかりましたが、http://forums.devshed.com/delphi-programming-90/list-of-で未回答の身振りが見つかりましたcom-ports-on-machine-510990.html [same thread]これは、異なるマシンおよび異なるバージョンのウィンドウでは信頼できない可能性があります。

QueryDosDevice()の使用に関する記事も見つかりましたが、http://delphi.about.com/cs/adptips2001/a/bltip0501_2.htm [このサンプルコード]を試してみると、COMの一覧が表示されないようです。ポート

質問: WindowsマシンのCOMポートを一覧表示するための(信頼できないWindowsバージョン間での)最も信頼できる方法は何ですか?

3 Answer


1


http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/regentry/44.mspx?mfr=true[DEVICEMAP\SERIALCOMM]はすべてのNTバージョンに適しています。 Win9xの場合はおそらくDYN_DATAを見る必要があります。

実行時の信頼性が必要な場合は、 この方法を使用してください。


1


Cで書かれているURLをたどってください

と同じアプローチは、デルファイでも実装することができます.. または誰かがSOであなたのために変換することができます..

これはすべてのウィンドウのバージョンで利用可能であるデバイスマネージャの原則から機能するので、これはすべてのウィンドウのバージョンで機能します。


0


これはWINDOWS用ではなくLINUX用のコードです…​.

function GetSerialPortNames:文字列。 var Index:整数。データ:文字列。 TmpPorts:文字列。 sr:TSearchRec。 TmpPortsを試し始めてください:= ''; FindFirst( '/ dev / ttyS *'、$ FFFFFFFF、sr)= 0の場合、(sr.Attrと$ FFFFFFFF)= Sr.Attrの場合に繰り返し開始します。 index:=長さ(データ)。 (index> 1)と(data [index] <> '/')はindex:= index  -  1を実行します。 TmpPorts:= TmpPorts '' copy(data、1、index 1);終わり; FindNext(sr)<> 0になるまで。終わり; FindClose(sr);最後に結果:= TmpPorts;終わり;終わり;